Bitbucket Pilelines/Deployments 입문

소개



Amazon S3와 CloudFront를 사용하여 정적 웹 콘텐츠를 전송하고 운영하고 있습니다.
「AWS의 콘솔 포치 포치하는 스트레스 갱신시의 운용을 편하게 하고 싶다!」라고 하는 디렉터나 디자이너의 요망에 대답하기 위해서 Bitbucket Pipelines를 사용해 자동화해 보았습니다.
정적 파일의 배포이므로 Pipelines 또는 Deployments로 입문 수준의 내용이라고 생각합니다.

전제


  • S3+CloudFront로 콘텐츠를 배포할 수 있는 환경이 갖추어져 있습니다
  • BitBucket의 Git 저장소가 있어야합니다

  • 절차



    1. IAM 사용자 생성



    Bitbucket Pipelines에서 배포에 사용할 IAM 사용자를 만듭니다.
    IAM에는 S3のオブジェクトを更新するのに必要 권한과 CloudFrontのInvalidationリクエストができる 권한이 필요합니다.
    정책 자체를 적절하게 작성하십시오.

    사용자를 만든 후 액세스 키를 생성하여 키 쌍을 얻습니다.

    2. BitBucket 설정



    2.1 Pipelines 활성화



    리포지토리의 왼쪽 메뉴에서 設定 > PIPELINES Setting > Enable Pipelines를 활성화합니다.

    2.2 환경 변수 설정



    리포지토리의 왼쪽 메뉴에서 設定 > PIPELINES Environment variables로 이동하여 다음 환경 변수를 정의합니다.


    Variable name
    Value
    보안


    AWS_ACCESS_KEY_ID
    1단계에서 얻은 ACCESS_KEY_ID


    AWS_SECRET_ACCESS_KEY
    1단계에서 얻은 SECRET_ACCESS_KEY


    CONTENTS_BUCKET
    배포 대상 버킷 이름

    DISTRIBUTION_ID
    CloudFront distribution ID



    어떠한 이유로 S3의 버킷이 변경되거나 CloudFront의 Distribution이 변경된 경우에도 Git의 커밋 없이 변경할 수 있도록 키 페어 이외도 환경 변수로 정의해 보았습니다.

    2.3 Pipeline 정의



    다음 파일을 리포지토리 바로 아래에 커밋합니다.

    bitbucket-pipelines.yml
    image: python:3.6.4
    
    pipelines:
      branches:
        master:
          - step:
              name: Print Message
              caches:
                - pip
              script:
                - echo "Deploy process to production environment started"
          - step:
              name: Deploy to Production(push to S3 and cache invalidation)
              deployment: production
              trigger: manual
              caches:
                - pip
              script:
                # Install
                - pip install awscli
                # Push to S3
                - aws s3 sync . s3://${CONTENTS_BUCKET}
                  --delete
                  --exclude '.git/*'
                  --exclude '.gitignore'
                  --exclude 'README.md'
                  --exclude 'bitbucket-pipelines.yml'
                # Requesting cache invalidation
                - aws cloudfront create-invalidation --distribution-id ${DISTRIBUTION_ID} --path '/*'
    

    이 내용의 경우 원격 리포지토리(Bitbucket)의 master 브랜치에 병합되면 Pipeline이 실행됩니다.trigger: manual 는 최초의 step 에는 기술할 수 없기 때문에, echo 로 메세지를 출력할 뿐의 step 를 기술해, 2 번째의 step 에 처리를 기재하고 있습니다.

    이제 배포는 Pipelines 화면에서 버튼을 누르는 것만으로 할 수 있으며, Deployments 화면에서 어떤 커밋이 배포되는지 추적하기 때문에 편리합니다.

    좋은 웹페이지 즐겨찾기