2
1

More than 3 years have passed since last update.

jenkinsでAmazon ECR上のイメージを使う

Posted at

はじめに

こんにちは、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おじさん、ぜひ試してみてください。

参考

2
1
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
1