Git 태그 push로 CircleCI 2.0 빌드 실행

Git으로 태그를 칠 때 자동으로 CircleCI 빌드를 실행하려고 성대하게 빠졌으므로 정보를 남겨 둡니다. CircleCI는 버전 1.0 대신 버전 2.0을 가정합니다.

여기에서는 다음 조건에서 빌드를 시작하는 작업을 만듭니다.
  • Git의 모든 브랜치 & 태그를 푸시하면 빌드 처리를 실행합니다.
  • Git 태그 ( v〇〇 ) 또는 master 브랜치를 푸시하면 배포 프로세스도 실행됩니다

  • 빌드와 배포 작업을 분리하지 않는 방법



    별로 멋지지 않지만, 이쪽이 간단하고 간단합니다. 포인트는 다음 두 점입니다.
  • filters/tags/only를 지정하고 Git 태그를 푸시하면 작업이 시작되도록합니다
  • deploy 단계에서 푸시 된 Git 태그 또는 분기를 식별하고 배포 프로세스를 수행할지 여부를 결정합니다.

    .circleci/config.yml
    version: 2
    jobs:
      build:
        docker:
          - image: circleci/golang:latest
        steps:
          - checkout
          - run: echo "Hello, World"
          - deploy:
              name: deploy build artifact
              command: |
                if [ "${CIRCLE_TAG}" != "" -o "${CIRCLE_BRANCH}" == "master" ]; then
                  [ "${CIRCLE_TAG}" != "" ] && TAG=${CIRCLE_TAG} || TAG=latest
                  echo "Deploy! ${TAG}"
                fi
    workflows:
      version: 2
      build-and-deploy:
        jobs:
          - build:
              filters:
                tags:
                  only: /v.*/
    

    빌드 및 배포 작업을 분리하는 방법



    Workflow답게 두 개의 작업을 사용하여 실현하는 방법은 이쪽입니다. 포인트는, 다음의 1점에 따릅니다. 사양이 너무 이해하기 어렵습니다
  • deploy 작업뿐만 아니라 build 작업에도 filters/tags/only를 지정

  • .circleci/config.yml
    version: 2
    jobs:
      build:
        docker:
          - image: circleci/golang:latest
        steps:
          - checkout
          - run: echo "Hello, World"
      deploy:
        docker:
          - image: circleci/golang:latest
        steps:
          - checkout
          - run:
              name: deploy
              command: |
                [ "${CIRCLE_TAG}" != "" ] && TAG=${CIRCLE_TAG} || TAG=latest
                echo "Deploy! ${TAG}"
    workflows:
      version: 2
      build-and-deploy:
        jobs:
          - build:
              filters:
                tags:
                  only: /v.*/
          - deploy:
              requires:
                - build
              filters:
                tags:
                  only: /v.*/
                branches:
                  only: master
    

    첫 번째 방법과 달리 작업이 두 가지로 분리되어 있기 때문에 배포 작업에서 빌드 작업의 출력을 사용하려면 주의해야 합니다. persist_to_workspace , attach_workspace 등을 사용하여 작업에서 작업으로 아티팩트를 전달해야합니다.

    .circleci/config.yml
    jobs:
      build:
        steps:
          - ...
          - persist_to_workspace:
              root: /tmp/workspace
              paths:
                - build/*
      deploy:
        steps:
          - ...
          - attach_workspace:
              at: /tmp/workspace
          - run: cat /tmp/workspace/build/output.txt
    

    좋은 웹페이지 즐겨찾기