tl;dr
俺の .circleci/config.yml を晒すシリーズ第一弾. もしかしたら, 第二弾は無いかもしれませんがご容赦ください. そして, この記事は YAMAP エンジニア Advent Calendar 2019 の三日目の記事になる予定です.
実現したいこと
- ソースコードは Github のリポジトリに存在している
- 成果物は S3 バケットにアップロード(S3 バケットは CloudFront 経由でコンテンツを配信することを想定)
development
ブランチに push した場合には, 開発環境の S3 バケット (your-development-bucket-name
) にアップロードされるようにしますproduction
ブランチに push した場合には, プロダクション環境の S3 バケット (your-production-bucket-name
) にアップロードされるようにします- 成果物ディレクトリ以下の一部のディレクトリはアップロード不要なので除外されるようにします
俺の .circleci/config.yml
以下のように書きました. orbs を使って成果物をアップロードするプロセスはガチャガチャコードを書く必要がなくなっています. また, persist_to_workspace
を使って build
ジョブから deploy
ジョブに成果物を共有しています.
version: 2.1 orbs: aws-s3: circleci/aws-s3@1.0.11 executors: default: docker: - image: circleci/node:12.12 - image: circleci/python:2.7 jobs: build: executor: default working_directory: ~/repo steps: - checkout - restore_cache: keys: - v1-dependencies-{{ checksum "path/to/package.json" }} - v1-dependencies- - run: name: Install dependencies command: | # Install dependencies commands echo "export PATH=$PATH:$(pwd)/path/to/node_modules/.bin" >> $BASH_ENV - save_cache: paths: - build/node_modules key: v1-dependencies-{{ checksum "path/to/package.json" }} - run: name: Build command: | # Build - persist_to_workspace: root: /home/circleci/repo paths: - your/path/* deploy: executor: default steps: - attach_workspace: at: /home/circleci/repo - checkout - run: name: list files command: | ls -l /home/circleci/repo/ yo - run: name: select bucket command: | if [ "${CIRCLE_BRANCH}" == "production" ]; then echo 'export S3_BUCKET=your-production-bucket-name' >> $BASH_ENV else echo 'export S3_BUCKET=your-development-bucket-name' >> $BASH_ENV fi - aws-s3/sync: from: /home/circleci/repo/your/path to: s3://${S3_BUCKET} overwrite: true arguments: > --delete --exclude /home/circleci/repo/your/path/ignore1 --exclude /home/circleci/repo/your/path/ignore2 workflows: version: 2 build-and-deploy: jobs: - build - deploy: requires: - build filters: branches: only: - master - production - development
orbs を使うといちいち aws cli を駆使することなく YAML の設定だけで (アクセスキーとシークレットアクセスキーを環境変数に設定しておく必要がありますが) S3 バケットにファイルアップロードすることが可能となります. 出来るだけ orbs を使うようにしたいですよね.
こんな感じで
俺のしょぼい .circleci/config.yml を出来る範囲で晒していこうと思います.