CircleCI에서 CodePipeline 시작

배경



요 전날 회사의 스테이징 환경을 EC2에서 Fargate로 리플레이스하고,
CodePipeline을 사용하여 Fargate에 자동 배포가 가능하도록했습니다.

그 때 CI는 CircleCI를 그대로 사용하여 CD를 CodeDeploy에 맡기고 싶었습니다.develop 브랜치 변경을 트리거로 CodePipeline을 시작하면
CircleCI와 병행하여 실행되기 때문에 CircleCI가 정상 종료했을 때만 CodePipeline이 실행되도록 했습니다.

여러가지 조사해 「이것이다」라고 하는 것이 없었기 때문에 자신이 생각한 이 방법이 같은 상황의 사람에게 참고가 되면 기쁘구나~라고

개요



자꾸 쓰면
CircleCI -> S3 -> CodePipeline -> CodeBuild -> CodeDeploy

CircleCI에서 S3으로 buildspec.yml와 커밋 해시가있는 파일 (commit) 보내기buildspec.ymlcommit 를 사용하여 빌드하고 배포합니다.

미리 CodeBuild에는 환경 변수로 git clonebuildspec.yml 의 내용은 git clone 하고 commit같은 느낌으로

S3 설정



적당하게 비공개 버킷을 만듭니다
만일 버킷 이름은 sample-deploy-hook


IAM 설정



S3 정책을 첨부한 사용자를 만들어 アクセスキーIDシークレットアクセスキー를 기록해 둡니다.



CircleCI 설정



환경 변수 설정



IAM에서 사용자를 만들 때 메모했다 アクセスキーID/シークレットキー각각 AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY 라는 환경 변수로 설정

.circleci/config.yml 설정



job 추가


deploy-staging:
    docker:
      - image: circleci/python:3.7
    working_directory: ~/project
    steps:
      - checkout
      - run:
          name: Install awscli
          command: |
            sudo pip install awscli
      - run:
          name: Setup AWS credentials
          command: |
            mkdir -p ~/.aws
            printf "[default]\nregion = ${AWS_REGION}\naws_access_key_id = ${AWS_ACCESS_KEY_ID}\naws_secret_access_key = ${AWS_SECRET_ACCESS_KEY}" > ~/.aws/config
            printf "[default]\naws_access_key_id = ${AWS_ACCESS_KEY_ID}\naws_secret_access_key = ${AWS_SECRET_ACCESS_KEY}" > ~/.aws/credentials
            chmod 600 ~/.aws/*
      - run:
          name: Create commit hash file
          command: echo -n $CIRCLE_SHA1 > /tmp/commit
      - run:
          name: Create zip for deploy
          command: zip -j build buildspec.yml /tmp/commit
      - run:
          name: Upload zip to s3 for hook deploy staging
          command: aws s3 mv ./build.zip s3://sample-deploy-hook/build.zip

내용적으로는
- awscli 설치
- AWS Credential 정보를 파일로 내보내기
- 커밋 해시가 있는 파일( commit ) 만들기
- buildspec.ymlcommit- zip을 S3에 업로드

workflow에 작업 추가


- deploy-staging:
  requires:
    - rspec
    - rubocop
    - db_seed

rspec이나 rubocop 등이 정상적으로 종료하는 것을 조건으로 하기 위해서 requires 하고 있습니다

CodePipeline 설정



첫 단계에서 アクションプロバイダーソース > Amazon S3 를 선택하고
버킷은 위에서 만든 것
검색 옵션은 CloudWatchS3 객체 키는 임의의 파일명(CI로부터 업하는 zip과 동명)으로 합니다



이제 CI가 지나갈 때 S3에 zip이 올라가고 트리거로 CodePipeline이 실행됩니다.

좋은 웹페이지 즐겨찾기