CircleaCI에 컨테이너를 구축한 다음 Docker Hub에 넣습니다.

7904 단어 tmpfsDocker

개요


Doke Hub의 구축은 매우 느리다!이런 경우가 많기 때문에 서큘레이션에 지었으면 좋겠다고 생각해서 환경을 구축해 봤어요.

yaml


전체는 다음과 같이 공개한다.
기사에서 간략한 부분을 발췌하여 소개하였다.
ryuichi1208/py-dep-kun
version: 2.1

executors:
  py-builder:
    machine:
      enabled: true
      image: circleci/classic:201808-01
      docker_layer_caching: true

  build_and_deploy:
    executor:
      name: builder
    steps:
      - run:
          name: Build container
          when: always
          command: |
            docker image build -t py-dep-kun .
      - run:
          name: Add container tag
          when: always
          command: |
            docker login -u ${DOCKERHUB_USER} -p ${DOCKERHUB_PASS}
            docker tag py-dep-kun ${DOCKERHUB_USER}/${DOCKERHUB_REPOS}:${CIRCLE_TAG}
            docker image push ${DOCKERHUB_USER}/${DOCKERHUB_REPOS}:${CIRCLE_TAG}
workflows
  version: 2
  defaultWorkflow:
    jobs
      - build_and_deploy:
          filters:
            tags:
              only: /v.*/
            branches:
              ignore: /.*/

CircleaCI에 구축


다음은 CircleaCI에서 변수를 설정하는 것입니다.
CIRCLE_TAG에서 Git 태그에 지정된 값을 가져오고 설정합니다.
Docker Hub에서 볼 수 있는 태그는 이 값입니다.

환경 변수 사용
    steps:
      - run:
          name: Build container
          when: always
          command: |
            docker image build -t py-dep-kun .
      - run:
          name: Add container tag
          when: always
          command: |
            docker login -u ${DOCKERHUB_USER} -p ${DOCKERHUB_PASS}
            docker tag py-dep-kun ${DOCKERHUB_USER}/${DOCKERHUB_REPOS}:${CIRCLE_TAG}
            docker image push ${DOCKERHUB_USER}/${DOCKERHUB_REPOS}:${CIRCLE_TAG}

tag가 첨부된push에만 반응하도록 설정합니다


다음과 같은 조건이 있다고 가정하다.
  • Merge가 아닌 임의의 시간에 처리하기를 원합니다
  • Master merge에 대해 특수 상태의 depro
  • 만 진행하고 싶습니다.
  • 디버깅 후 고장으로 굴러가는 방법의 확률
  • 상술한 것 중에는 임의의 시기에 설계를 하는 방법이 있다.
    그 방법은 다음과 같다.
    Workflow를 통해 작업 실행 제어
        jobs
          - build_and_deploy:
              filters:
                tags:
                  only: /v.*/
                branches:
                  ignore: /.*/
    
    이럴 때는 주의가 필요하다.
    tags는 반드시 모든 job에 기술해야 한다.
    다른jobs에 탭을 쓰지 않으면 임무를 건너뛰거나 예상치 못한 동작이 발생합니다.
    (솔직히 여기가 죽을 지경이야.)
         - test_for_prd:
              requires:
                - build
              filters:
                tags:
                  only: /^v(\d\.){2}\d.*/
                branches:
                  ignore: /.*/
    
          - approval:
              type: approval
              requires:
                - build
              filters:
                tags:
                  only: /^v(\d\.){2}\d.*/
                branches:
                  ignore: /.*/
    
          - deploy:
              requires:
                - approval
              filters:
                tags:
                  only: /^v(\d\.){2}\d.*/
                branches:
                  ignore: /.*/
    
    위에서 말한 바와 같이 지정을 통해 문제를 해결한다.
    (참고로 공식 문서에 주의사항이 적혀 있어서 무시했을 뿐이다.)

    좋은 웹페이지 즐겨찾기