2
0

More than 5 years have passed since last update.

drone CIでECRからimageをpullする

Posted at

久々の投稿です。
現在は自分の会社で受託開発しながら、個人事業主てして副業しながら、契約社員として働いている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での使い方として以下のシンプルなアーキでやってみました。

スクリーンショット 2019-03-12 10.49.17.png

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_idaws_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の認証を通せば後は、scriptscommandsでなんでもできます。
但し当たり前ですが、同じプロセス内でしか認証は持続しないので、気をつけてください。

  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

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0