CircleCI 2.1 스즈메

15154 단어 CircleCICircleCI2.1

소개



CircleCI는 개발·운용을 효율화해 주는 자동화 서비스입니다.
github나 bitbucket과 연계시켜, 지정한 브랜치에 갱신이 있던 시점에서 자동으로 빌드나 테스트, 배포등의 실행을 할 수 있습니다.
2.1을 사용한 적이 없었기 때문에 새로운 기능을 조사해 보았습니다.
※ CircleCI2.0까지를 아는 방향의 기사가 됩니다

CircleCI 2.1


  • 2018년 말, 2.0 -> 2.1로 업그레이드
  • DRY에 설정 파일을 작성하기 위해 yaml 표기법에는 한계가있었습니다

  • 중복 jobs 설명을 간단하게 할 수 있습니다
  • 지금까지와 성능적인 차이는 없다

  • 2.0에서 마이그레이션하기 쉽습니다
  • CircleCI 설정 화면에서 새 파이프 라인을 활성화합니다 (Advanced (고급) 섹션 하단).
  • 기존 config.yml 에서 version: 2.02.1
  • 2.0부터 폐지된 기능은 없기 때문에 사용해 손해 없음!!


  • 새로운 기능


  • commands
  • executors
  • parameters
  • when 단계
  • orbs

  • commands



    jobs 내에서 실행되는 steps 내에서 재사용할 수 있는 명령을 정의합니다.
    
    commands:
      bundle-install:
        description: "バンドルをインストールするコマンド"
        steps:
          - restore_cache:
              keys:
                - v1-dependencies-{{ checksum "Gemfile.lock" }}
                # fallback to using the latest cache if no exact match is found
                - v1-dependencies-
          - run: bundle install --path vendor/bundle
          - save_cache:
              key: v1-dependencies-{{ checksum "Gemfile.lock" }}
              paths:
                - vendor/bundle
    
    jobs:
      my-job:
        steps:
          - checkout
          - bundle-install # コマンドで定義した処理が実行される
    



    필수
    금형


    steps

    Sequence

    parameters
    -
    Map

    description
    -
    문자열


    executors



    단계를 실행하기 위한 환경을 정의합니다.
    
    executors:
      frontend_executor:
        working_directory: ~/app
        environment:
          DIST_DIR: public
        docker:
          - image: circleci/node:10.16.0
    
    jobs:
      frontend-build:
        executor: frontend_executor
        steps:
          - checkout
          - run: ...
    



    필수
    금형


    도커
    ○(1)
    목록

    resource_class
    -
    문자열

    기계
    ○(1)
    Map

    macos
    ○(1)
    Map


    -
    문자열

    working_directory
    -
    문자열

    환경
    -
    Map


    ※ ○(1) 중 하나는 필수

    parameters



    parameters를 사용하는 것으로, 부분적인 분배가 가능하게 됩니다.
    jobs, commands, executors 바로 아래에서 선언합니다.
    
    commands:
      say-hello:
        description: "デモ用のごく簡単なコマンド"
        parameters:
          to:
            type: string
            default: "Hello World"
        steps:
          - run: echo << parameters.to >>
    jobs:
      my-job:
        steps:
          - say-hello:
              to: "こんにちは世界"
    


    키 이름
    필수
    금형


    description
    -
    문자열

    type※

    문자열

    default
    -
    type에 지정된 유형의 값


    ※ 타입


  • 문자열
  • 부울 값
  • 정수
  • 열거
  • Executor
  • 단계
  • 환경 변수 이름

  • cf. h tps : // / rc ぇ시. 코 m/도 cs/그럼/2.0/레신 g-곤후 g/#%에3%83%91%에3%83%아9%에3%83%아1%에3% 83% BC% 3% 82% BF% 3% 83% BC% 5% 9% 8B

    when 단계



    조건부 단계를 사용하면 조건이 충족된 경우에만 수행되는 단계를 정의할 수 있습니다.
    워크플로우가 실제로 실행되기 전에 평가되기 때문에 주의입니다.
    
    jobs:
      my-job:
        steps:
          - when:
             condition: << parameters.preinstall-foo >>
             steps:
                - run: echo "preinstall"
          - unless:
              condition: << parameters.preinstall-foo >>
              steps:
                - run: echo "don't preinstall"
    

    orbs



    CircleCI2.1의 주요 기능!
    commands, jobs, executors로 구성된 구성 패키지
    CircleCI 공인의 것, 파트너 기업에 의한 타사의 것, 스스로 자작할 수도 있고, 소스 코드는 모두 공개되고 있습니다.

    예를 들어 circleci/aws-s3 을 사용하면 이렇게 됩니다.
    orbs:
      aws-s3: circleci/[email protected]
    
    jobs:
      my-job:
        steps:
          - aws-s3/sync:
              from: "public"
              to: "s3://hoge-dev"
              overwrite: true
    

    CircleCI 공인 Orbs는 여기
    h tps : // / rc ぇ시. 코 m / rbs / 레기 스트리 /

    Before/After



    staging과 production, 각각 다른 S3 버킷에 업로드하는 설정 파일을 비교해 봅시다!

    Before


    version: 2.0
    
    jobs:
      sync_s3:
        docker:
          - image: xueshanf/awscli
            environment:
              BUCKET_NAME_PRODUCTION: sample-production
              BUCKET_NAME_STAGING: sample-staging
              ROOT_DIR: public
        steps:
          - checkout
          - deploy:
              name: Upload S3
              command: |
                if [ $CIRCLE_BRANCH == "production" ]; then
                  aws s3 sync --exact-timestamps --exclude "**/.*" --delete $ROOT_DIR s3://$BUCKET_NAME_PRODUCTION
                fi
                if [ $CIRCLE_BRANCH == "staging" ]; then
                  aws s3 sync --exact-timestamps --exclude "**/.*" --delete $ROOT_DIR s3://$BUCKET_NAME_STAGING
                fi
    
    workflows:
      version: 2
      build_deploy:
        jobs:
          - sync_s3:
              filters:
                branches:
                  only:
                    - production
                    - staging
    

    After


    version: 2.1
    
    orbs:
      aws-s3: circleci/[email protected]
    
    jobs:
     sync_s3:
        parameters:
          bucket_name:
            type: string
        steps:
          - aws-s3/sync:
              from: "public"
              to: "s3://<< parameters.bucket_name >>"
              overwrite: true
              arguments: --exact-timestamps --exclude "**/.*"
    
    workflows:
      version: 2
      build_deploy:
        jobs:
          - sync_s3:
              bucket_name: sample-staging
              filters:
                branches:
                  only:
                    - staging
          - sync_s3:
              bucket_name: sample-production
              filters:
                branches:
                  only:
                    - production
    

    기술량은 조금 늘어났지만, 꽤 읽을 수 있게 된 것 같습니다.
    보다 복잡한 구성이라면 더욱 효과를 발휘할 것 같습니다.



    circleCI 로컬 CLI를 설치하면 2.1 -> 2.0 변환도 가능합니다.
    $ circleci config process .circleci/config.yml > past-config.yml
    

    CircleCI 로컬 CLI 사용 - CircleCI

    참고 사이트


  • CircleCI 설정 - CircleCI
  • 구성 재사용 - CircleCI
  • Orbs 사용 - CircleCI
  • 좋은 웹페이지 즐겨찾기