はじめに
こんにちは、SREエンジニアやっています。@hayaosatoです。
今回はjenkinsでのCI/CDの際に自作のDockerイメージを利用したい機会があると思います。
jenkinsのDockerプラグインを利用してDockerfileをビルドさせて実行することも出来るのですが、配布されたイメージを利用したイメージを使いたいなど、レジストリ上のイメージを利用したいケースがあると思います。
そのようなケースに対応できるよう、jenkinsでレジストリから取得したイメージを使う方法をECRに特化して書いていこうと思います。
Dockerfileからのビルド
一応、独自のイメージを利用するケースとしてDockerfileからのビルド方法について書いていきます。
Jenkinsのdockerプラグインでは、 agent
にdockerfileを指定することができ、デフォルトではアプリのルートディレクトリのDockerfileで作成されます。
pipeline {
agent { dockerfile true }
stages {
stage('Test') {
steps {
sh "echo 'hoge'"
}
}
}
}
コンテナレジストリ上のイメージ
さて、本題のコンテナレジストリ(ECR)上のイメージを利用する方法ですが、以下の通りになります。
pipeline{
agent any
stages{
stage('Hoge') {
steps{
script{
docker.withRegistry("https://${AWSアカウントID}.dkr.ecr.${ECRのリージョン}.amazonaws.com") {
sh("`aws ecr get-login --no-include-email --region ${リージョン}`")
docker.image('my-custom-image').inside {
sh("echo 'hoge'")
}
}
}
}
}
}
}
前提として、JenkinsでのコンテナレジストリはデフォルトでDockerHubを利用するようになっています。
DockerプラグインのwithRegistry
というレジストリを指定して作業することのできる機能があるのですが、
これを利用することでDockerHub以外のレジストリを利用することができます。
今回はECRを利用するのでwithRegistry
の引数にレジストリのURLを入れるのですが、ここではリポジトリのURIでは無いので注意してください。
また、docker loginも必要になってきますので、コマンドでloginを行います。
すると、DockerHubでのイメージの利用と同様にdocker.image
を利用することができるようになります。
最後に
今回はJenkinsでECR上のコンテナイメージを利用する方法を書きました。
Jenkinsおじさん、ぜひ試してみてください。