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