drone CIでECRからimageをpullする
久々の投稿です。
現在は自分の会社で受託開発しながら、個人事業主てして副業しながら、契約社員として働いているrevenue-hackです。
https://www.praha-inc.com/
こんな会社やってます。
さて、今回はdrone CIでECRからpullして、そのままdocker run
して、コンテナ立てる方法についてお話します。
対象ユーザ
- drone CIを使っている人
- コンテナ系のCIに興味がある人
- AWSとdrone CIを使っている人
drone CIについて
drone CIについては色々な記事があるのでここでは詳細に述べませんが、dockerコンテナ内でジョブを実行していくCIになります。
なので、drone CI自体がdockerで立てるようになっているので、docker in dockerみたいな感じでジョブを実行していく感じになります。
とかが参考になるかと思います。
また2019-03-11現在、v1.0.0-rc.6
なので、もう少しでga
になるかな〜
- https://github.com/drone/drone
今回のdrone CIの使い方
今回はdrone CIでの使い方として以下のシンプルなアーキでやってみました。
drone CIでimage build&push
まずdocker CIでimage buildする方法です。
以下が.drone.yml
(buildしているジョブだけです)。
develop-build:
group: build
image: plugins/ecr
region: ap-northeast-1
registry: registry uri
environment:
- AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
secrets: [ AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY ]
dockerfile: ./Dockerfile
tags: ${DRONE_COMMIT:0:8}
when:
branch: develop
event: push
imageは公式のpluginでplugins/ecr
というのがあるので、それを使います。
jobのkeyとしてregion
,registry
,repo
をそれぞれ指定します。
key | value | 説明 |
---|---|---|
group | build | 同じvalueでグルーピングしておくと、並列処理してくれる |
region | ap-northeast-1(東京) | ECRのリージョン |
registry | registry uri | ECRのregistry uri |
environment | 環境変数 | ECRにログインするために必要なIAMのログイン情報(acccess_key, secret_key) |
dockerfile | ./Dockerfile | Dockerfileの場所 |
tag | ${DRONE_COMMIT:0:8} | docker tag.${DRONE_COMMIT:0:8}でcommit hashの前8桁が使える |
when | いつ実行するか | 今回の場合だと、developブランチにpushされたときこのjobが実行される |
あとはsecretsにaws_access_key_id
とaws_secret_access_key
を登録しておきましょう。
https://docs.drone.io/user-guide/pipeline/secrets/
このjobを実行すると、Registry URIにimageがpushされます。
drone CIでimage pull
今回の掲題でもある内容です。
pushしたのはいいもののどうやってpullすればよいのかというのに悩みました。
結果、イメージを作っちゃいました。
- https://hub.docker.com/r/revenuehack/drone-ecr-auth
- https://github.com/revenue-hack/drone-ecr-auth
これを使ってECRの認証を通せば後は、scripts
やcommands
でなんでもできます。
但し当たり前ですが、同じプロセス内でしか認証は持続しないので、気をつけてください。
develop-deploy:
group: deploy
image: revenuehack/drone-ecr-auth
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- AWS_REGION=ap-northeaxt-1
secrets: [ AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY ]
commands:
- $(aws ecr get-login --region ap-northeast-1 --no-include-email)
- docker pull registry_url:${DRONE_COMMIT:0:8}
- docker run -d -p 8181:80 --net net-network_default --name=web_development registry_url:${DRONE_COMMIT:0:8}
when:
branch: develop
event: push
imageに先程のrevenuehack/drone-ecr-auth
を指定します。
あとは環境変数をしているのを忘れずにやります。
そして最後にcommands
で$(aws ecr get-login --region ap-northeast-1 --no-include-email)
をすることで
認証が通るので、そこからはpullするなりrunするなり好きなようにできます。
以上、drone CIでECRからpullしてくる方法でした。
Reference
Author And Source
この問題について(drone CIでECRからimageをpullする), 我々は、より多くの情報をここで見つけました https://qiita.com/revenue-hack/items/61293125c98606a20d9b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .