Concourse 를 통한 CI/CD 파이프라인

Posted by Just Do It ! 행동하지 않으면 성공도 실패도 없다 on Tuesday, February 2, 2021

Concourse 설치

Concourse 설치하는 방법은 여러가지가 있는데, 대표적으로 아래 두가지 방법이 있다. 테스트, 데모, PoC 용도로는 docker-compose를 사용할 수 있으며, 운영 서버로 구성하는 경우 서버에 설치하거나 Kubernetes 에 설치할 것을 권고한다.

https://concourse-ci.org/docs.html

Docker-compose

docker-compose 를 사용해서 8080 포트로 concurse 를 실행할 수 있으며, docker-compose.yml 파일을 수정하여 포트나 인스턴스 수를 조정할 수 있다.

wget https://concourse-ci.org/docker-compose.yml
docker-compose up -d

Kubernetes / Helm

쿠버네티스에 Helm 으로 설치할 경우, https://github.com/concourse

helm repo add concourse https://concourse-charts.storage.googleapis.com/
heml repo update
helm install concourse concourse/concourse -n tanzu-system-concourse \
  --set web.ingress.enabled=true \
  --set web.ingress.hosts=fly.exmaple.com \
  --set persistence.worker.storageClsss=default \
  --set postgresql.persistence.storageClass=default \
  --set web.replicas=1 \
  --set worker.replicas=2

Cleanup

helm delete concourse -n tanzu-system-concourse
kubectl delete pvc -l app=concourse-worker

Concourse CLI - fly

concourse 에서는 fly 라는 cli 를 통해서 파이프라인을 배포하고 실행한다.

fly -t lite login -c http://fly.jupilh.cf:8080 -u test -p password

simple pipeline

wget -nv https://raw.githubusercontent.com/concourse/testflight/8db3bc5680073ec4eb3e36c8a2318297829b9ce0/pipelines/fixtures/simple.yml

simple.yml

---
jobs:
- name: simple
  plan:
  - task: simple-task
    config:
      platform: linux
      image_resource:
        type: docker-image
        source: {repository: busybox}
      run:
        path: echo
        args: ["Hello, world!"]
  • set-pipeline
fly -t lite set-pipeline -p hello-world -c simple.yml

  • unpause-pipeline
fly -t lite unpause-pipeline -p hello-world
  • trigger-job 으로 파이프라인의 특정 job 을 실행할 수 있다.
fly -t lite trigger-job -j hello-world/simple

Pipeline Basic

Config

# commented lines are prefixed with the '#' character

# strings
quoted_string: "bar"
unquoted_string: hello world!
multiline_string: |
  hello, world!
  this is one big string with a trailing linebreak!  

# arrays
array: [hello, world]
multiline_array:
- hello
- world

# objects
object: {one: uno, two: dos}
multiline_object:
  one: uno
  two: dos

# boolean values
booleans: [true, false]

# numeric values
numeric: [1234, 12.34]

Vars

Pipeline

  • resource
  • job
  • task

Resource

Job

Task