Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

travis-ciでecrにpushする

More than 3 years have passed since last update.

ecrにdocker imageを上げるのを毎回手動でやるのは結構疲れます。ですのでtravis-ciを使って自動化しました。

.travis.ymlを作成する

まず、このgistをそのままコピーして.travis.ymlを作成しました。

awsの環境変数を追加する

ecrにdocker imageをpushするためには AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYが必要です。これをそのまま.travis.ymlに書くのはまずいので暗号化して.travis.ymlに追加します。そのために travisgemをインストールします。 travisgemをが環境変数の暗号化から.travis.ymlへの追加までうまくやってくれます。便利です。

$ gem install travis
$ travis encrypt AWS_ACCESS_KEY_ID=AKIxxxxx --add
$ travis encrypt AWS_SECRET_ACCESS_KEY=Apxxxxxxxxx --add

これで.travis.ymlに以下のように暗号化された環境変数が追加されました。

env:
  global:
    - secure: xxxxx
    - secure: xxxxx

参考: https://docs.travis-ci.com/user/encryption-keys/

masterにマージされた時だけビルドする

このままではfeatureブランチでもpushされると勝手にbuild&pushされてしまって問題なのでmasterブランチにマージされた時のみbuild&pushされるようにします。

travis-ciでは特定ブランチのみで.travis.ymlに書かれたスクリプトを動かすことができるのですが、これを使うと他のテストも走らなくなってしまいます(https://docs.travis-ci.com/user/customizing-the-build) 。これは問題なので別の手段をとります。

CIが走っているブランチは $TRAVIS_BRANCHという環境変数に格納されているのでこの値をチェックしてコマンドを実行するようなスクリプトを書きます。

# script/travis-docker-setup.sh
if [[ "$TRAVIS_BRANCH" == "master" ]]; then
  docker --version
  pip install --user awscli
  export PATH=$PATH:$HOME/.local/bin
  eval $(aws ecr get-login --region ap-northeast-1)
  docker build -t xxx -f Dockerfile.production .
  docker tag grow_turf:latest 12345.dkr.ecr.ap-northeast-1.amazonaws.com/xxx:latest
  docker push 12345.dkr.ecr.ap-northeast-1.amazonaws.com/xxx:latest
fi

そして.travis.ymlの after_successを以下のようにします。

# .travis.yml
acter_success:
  - ./script/travis-docker-setup.sh

そして最後にsettingsより Build branch updatesをオンにします。

Screen Shot 2017-04-05 at 16.37.44.png

これでmasterのみでdocker buildとdocker pushが走るようになります。

参考: http://stackoverflow.com/questions/34591587/travis-conditional-on-branch-after-success

これであとはslack連携なんかすればいい感じになります。

.travis.yml

最後に、できた.travis.ymlは以下のようになりました。(travis-docker-setup.shは上で書いたやつそのまんまです)

sudo: required
language: ruby
services:
- docker
install:
- echo "install nothing!"
script:
- rspec
after_success:
- "./script/docker-setup.sh"
env:
  global:
  - secure: longString
  - secure: longString
alieaters
Alibaba Cloudを上手に使うためのノウハウの共有を目的としたコミュニティ
https://www.alieaters.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away