結構前ですが、当社のサイトVegewelをElasticBeanstalkで自動デプロイするためにCIを導入したという話を書きました。CircleCIです。
https://qiita.com/hardreggaecafe/items/995ad9a278e80c903e42
このCircleCIですが、CircleCIの方に簡単に設定をした後にリポジトリのルートディレクトリにcircle.ymlを置くというものです。個人的にはJenkinsよりもユーザフレンドリーに感じています。
で、使っている人は既にご存知だと思いますが、2017年あたりからCircleCIの2.0が出てきて、こちらの方を推してくるようになり、ついには2018年8月31日までに移行せよという強制命令が出されるまでになりました。
1.0時代に悩みながら以下のようなyamlファイルを作った経験とDocker知識が必須となる2.0への抵抗感から避け続けてきたのですがそうも行かなくなったのでなんとか対応しました。
machine:
python:
version: 2.7.6
dependencies: # EB CLIをCircleCIサーバ上にインストール
pre:
- pip install awsebcli
database: # 勝手にCircleCIのデータベースへの操作が行われるような記載がされるのでなにもしないように以下を記入
override:
- exit 0
test: # 勝手にCircleCIのテストの操作が行われるような記載がされるのでなにもしないように以下を記入(テスト必要ならここに記載)
override:
- exit 0
deployment:
staging:
branch: staging # BitBucketブランチ名
commands:
- eb deploy vegewel-staging
production:
branch: master # BitBucketブランチ名
commands:
- eb deploy vegewel
CircleCIでは移行ツールというものを用意しています。ドキュメントはこちら。
基本的にcircle.ymlを.circleciというディレクトリを作成してその下にconfig.ymlを作った上で2.0に対応した設定を記述します。
この2.0に対応したconfig書くのが大変なのでツールがあるのですが、複雑な設定が書いてあったりするとあまり役には立たないようです。当方のcircle.ymlに関しては一見それらしいconfigが書かれて、これをリポジトリにあげてもエラーにならなかったけど、期待したデプロイ作業は行われず残念な結果となりました。
ちなみにツールの使い方としてはこちらです。
https://circleci.com/api/v1.1/project/github/bar/foo/config-translation
bar にはユーザー名、foo にはプロジェクト名を入れます。 vegewel の場合はbitbucket使ったので以下のようになります。
https://circleci.com/api/v1.1/project/bitbucket/frembassy/vegewel/config-translation
これで作成したconfigをガッツリ手直しして上記と同等の内容にしたのがこちらです。
version: 2
jobs:
build:
working_directory: ~/frembassy/vegewel
parallelism: 1
shell: /bin/bash --login
environment:
CIRCLE_ARTIFACTS: /tmp/circleci-artifacts
CIRCLE_TEST_REPORTS: /tmp/circleci-test-results
docker: # ここにDockerで作成するサーバ環境を記載(自動生成されるはず)
- image: circleci/build-image:ubuntu-14.04-XXL-upstart-1189-5614f37
command: /sbin/init
steps:
- run: mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS
- run:
working_directory: ~/frembassy/vegewel
command: pip install awsebcli
- run:
working_directory: ~/frembassy/vegewel
command: rm -f frembassy/vegewel/.rvmrc; echo 2.5.0 > frembassy/vegewel/.ruby-version; rvm use 2.5.0 --default
- checkout # ソースのチェックアウトは必須(用意されているコマンドらしい)
- run: # 以下デプロイ実行シェルでブランチ識別して動かしている
name: Deploy
command: |
if [ "${CIRCLE_BRANCH}" == "master" ]; then
echo "Deploy production"
eb deploy vegewel
else
echo "Deploy staging"
eb deploy vegewel-staging
fi
workflows: # 実際のデプロイはこのセクションで行われる
version: 2
build-n-deploy:
jobs:
- build:
filters: # ブランチ単位で実行可能にできる
branches:
only:
- staging
- master
大きく違うのはDockerでLinuxの仮想環境(テストなどを書くのであればDBの内容なども記載すべし)を記載するあたりかなと思います。自分のPCにDocker入って無くても問題ありません。
CircleCIにデプロイ準備のための仮想環境を作るという体裁にすることが大事なので、ローカル環境も合わせないといけないわけではないです。
以上、お役に立てば幸いです。