개발

concourse 테스트

flowertaekk 2021. 5. 5. 00:07

이번에는 CICD 툴 중에서 concourse 를 테스트 해보겠습니다.

 

 CICD 기초 개념에 대해서는 flowertaekk.tistory.com/17 에 정리가 있으니 확인해주세요!


공식문서는 concourse-ci.org/docs.html (한국어는 없지만, 화이팅!)

 

Docs - Concourse CI

Concourse is a pipeline-based continuous thing-doer. The word "pipeline" is all the rage in CI these days, so being more specific about this term is kind of important; Concourse's pipelines are significantly different from the rest. Pipelines are built aro

concourse-ci.org


테스트 방법으로는 concourse 는 circle-ci 와 달리 concourse를 위한 서버도 직접 관리해야하기 때문에(젠킨스 처럼), 도커 환경을 하나 올린 후에 그 위에서 깃허브와 연동되도록 테스트해보겠습니다.

(공식문서의 Install > Quick start 를 보면 아래와 같은 docker-compose.yml 파일 자체를 제공하고 있습니다!)

version: '3'

services:
  concourse-db:
    image: postgres
    environment:
      POSTGRES_DB: concourse
      POSTGRES_PASSWORD: concourse_pass
      POSTGRES_USER: concourse_user
      PGDATA: /database

  concourse:
    image: concourse/concourse
    command: quickstart
    privileged: true
    depends_on: [concourse-db]
    ports: ["8080:8080"]
    environment:
      CONCOURSE_POSTGRES_HOST: concourse-db
      CONCOURSE_POSTGRES_USER: concourse_user
      CONCOURSE_POSTGRES_PASSWORD: concourse_pass
      CONCOURSE_POSTGRES_DATABASE: concourse
      CONCOURSE_EXTERNAL_URL: http://localhost:8080
      CONCOURSE_ADD_LOCAL_USER: test:test
      CONCOURSE_MAIN_TEAM_LOCAL_USER: test
      CONCOURSE_WORKER_BAGGAGECLAIM_DRIVER: overlay
      CONCOURSE_CLIENT_SECRET: Y29uY291cnNlLXdlYgo=
      CONCOURSE_TSA_CLIENT_SECRET: Y29uY291cnNlLXdvcmtlcgo=                                                        

docker-compose.yml 파일을 보면, concourse 는 DB도 유저가 직접 관리해야 하는 느낌이네요!

(postgresql 을 사용해서 빌드 이력 등의 관리를 한다고 합니다!)


테스트 : 공식 튜토리얼을 베이스로 하겠습니다! → concoursetutorial.com/basics/task-hello-world/

1. 튜토리얼용 docker-compose.yml 다운로드

wget https://raw.githubusercontent.com/starkandwayne/concourse-tutorial/master/docker-compose.yml

2. docker-compose.yml 파일로 도커 환경을 가동시켜보겠습니다.

<docker-compose.yml 이 있는 패스>/docker-compose up -d --build

3. 화면 상단에 있는 first, download the CLI tools: 에서 각자 환경에 맞는 fly 파일을 다운로드합니다.

    3.1. fly를 환경변수에 추가 (저는 리눅스 환경이기 때문에 아래와 같이 했습니다.)

sudo mv ~/Downloads/fly /usr/local/bin
sudo chmod 0755 /usr/local/bin/fly

    3.2. github.com/concourse/concourse/releases 여기에서 바이너리로 다운로드 받으실 수도 있습니다.

# 설치하기
tar xvzf <fly-*.tgz>

 

4. 콘솔에서 다음 명령어로 타겟 환경에 접속(인증) 합니다!

    →다운받은 docker-compose.yml 파일의 내용을 보면 로컬유저를 admin:admin 으로 설정하고 있는걸 확인할 수 있습니다.

# fly -t <target name> -c <concourse url> -u <user name> -p <password>
fly -t test login -c http://localhost:8080 -u admin -p admin

 http://localhost:8080/ 에 접속하고 admin:admin 로 로그인합니다.

 

5. GitHub 테스트용 Repository 를 생성합니다.

    5.1. react CRA로 프로젝트를 생성해서 푸쉬합니다..

 

6. GitHub 에 pipeline.yml 파일을 만듭니다.

---
resources:
  - name: git-test # resource name (자유롭게 명명 가능)
    type: git # Resources type ex) git, s3 etc..
    source:
      uri: https://github.com/비밀/concourse.git # 깃 주소
      branch: main

jobs:
  - name: job-git-test #pipe-line 이름
    public: true
    plan:
    - get: git-test # resources name
      trigger: true # Resource에 변경이 생겼을 때 빌드를 실행할지 여부 설정
    - task: yarn-install
      config:
        inputs:
        - name: git-test
        outputs:
        - name: results
          path: git-test
        platform: linux
        image_resource:
          type: docker-image
          source: { repository: node }
        run:
          path: yarn
          args: ["install"]
          dir: git-test
    - task: yarn-build
      config:
        inputs:
        - name: git-test
        - name: results
        outputs:
        - name: results
          path: results
        platform: linux
        image_resource:
          type: docker-image
          source: { repository: node }
        run:
          path: yarn
          args: [build, --prod]
          dir: results
    - task: deploy
      config:
        inputs:
        - name: git-test
        - name: results
        platform: linux
        image_resource:
          type: docker-image
          source: { repository: node }
        run:
          path: scp
          args: [-o, "StrictHostKeyChecking=no", -r, results/build/, <user>@<url>:/usr/share/nginx/html/]
        params:
          ID_RSA: ((idrsa))

    6.1. scp 를 위해서 ssh 설정이 필요합니다!  암호파일 관련 설정은 아래 'Concourse 사용법!' 의 8.2를 확인해주세요.

 

7. pipeline.yml 을 작성합니다.

fly -t test sp -p git-test -c pipeline.yml

 

8. job 을 실행시켜줍니다.

fly -t test up -p git-test

Concourse 사용법!

 

1. task.yml 에 inputs 를 정의해서 빌드에 필요한 dependency 들을 로컬으로부터 전달하기

inputs:
- name: some-important-input

    1.1. -i option 하고 같이 써야함. 현재 디렉토리가 input에 정의된 디렉토리랑 동일하면 -i 옵션은 생략가능.   

fly -t <target> execute -c <task.yml> -i <inputs-directory-name>=<path>

    1.2.  이렇게 inputs 에 등록해줌으로써 task.yml 에서 ./inputs-directory-name/some.sh 과 같은 방식으로 스크립트 등의 실행이 가능해집니다. 

 

2. 파이프라인 설정하기

fly -t <target> set-pipeline -c <pipeline-file.yml> -p <pipeline name>

 

3. Concourse 역시 CICD 작업에서 필요한 스크립트 등을 자체적으로 저장하는 기능은 제공하지 않는다고 공식문서에 적혀있습니다. 그래서 Git, S3 같은 외부 저장장소에 의존하게 되는데, Concourse 내부적으로는 이런 외부 저장장소를 Resources 라고 부릅니다.

    3.1. resource-types.concourse-ci.org/ 에서 여러가지 Resource 타입들을 확인할 수 있습니다.

 

4. 특정 Job에 대한 로그 확인하기

fly -t <target> watch -j <pipleline-name>/<job-name>

 

5. 전체 빌드 결과 확인하기

fly -t <target> builds

 

6. 커맨드로 Job 실행시키기

fly -t <target> trigger-job -j <pipeline-name>/<job-name>

    6.1.  Job 실행과 동시에 로그 감시하기

fly -t <target> trigger-job -j <pipeline-name>/<job-name> -w

 

7. 파이프라인 제거하기

fly -t <target> destroy-pipeline -p <pipeline-name>

 

8. 파이프라인에 파라미터 설정하기

    8.1. 파이프라인에 직접 설정하기 어려운 비밀번호 등의 정보를 전달할 때 사용

--- pipeline.yml (출처 https://concoursetutorial.com/basics/parameters/)
jobs:
- name: show-animal-names
  plan:
  - task: show-animal-names
    config:
      platform: linux
      image_resource:
        type: docker-image
        source: {repository: busybox}
      run:
        path: env
        args: []
      params:
        CAT_NAME: ((cat-name))
        DOG_NAME: ((dog-name))
        
--- fly with option
fly -t <target> sp -p <pipleline-name> -c <pipleline.yaml> -v <variable-name>=<value> -v ...

    8.2. -l 옵션을 통해서 따로 yaml 파일을 만들어서 파라미터로 넘겨주는 것도 가능

        8.2.1. concoursetutorial.com/basics/parameters/#parameters-from-local-file

 

Parameters - Concourse Tutorial by Stark & Wayne

Concourse pipelines can include ((parameter)) parameters for any value in the pipeline YAML file.

concoursetutorial.com

 

'개발' 카테고리의 다른 글

target="_blank" 다른 탭으로 링크 이동하기  (0) 2021.11.12
Jest 사용법 (Usage)  (0) 2021.05.30
프론트엔드 vs. 백엔드 테스트  (0) 2021.05.22
Java 접근 제한자 (Access Modifier)  (0) 2021.05.15
circle-ci 테스트  (0) 2021.04.30