mito’s blog

IT技術メインの雑記。思い立ったが吉日。

[Jenkins] パイプラインをECRに登録したイメージで動かす

はじめに

JenkinsをDokerコンテナで動かすのではなく、JenkinsのパイプラインをECRに登録したイメージで実行します。


環境


インストールするプラグイン


設定手順

  1. Jenkinsの管理->認証情報より、ECRの認証情報を登録します。
  2. dockerグループに、パイプラインを実行するSSHユーザを追加します。
  3. パイプラインのagentに、以下を記載します。
agent {
    docker { 
        image "【AWSアカウント】.dkr.ecr.【リージョン】.amazonaws.com/【リポジトリ名】:【タグ】"
        registryUrl "https://【AWSアカウント】.dkr.ecr.【リージョン】.amazonaws.com"
        registryCredentialsId "ecr:【リージョン】:【認証情報のID】"
    }
}


実行ログ

[Pipeline] withEnv
[Pipeline] {
[Pipeline] withDockerRegistry
$ docker login -u AWS -p ******** https://【AWSアカウント】.dkr.ecr.【リージョン】.amazonaws.com
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /xxx/jenkins/workspace/xxx@tmp/1a1fd3c9-84f7-44ce-a102-3a035e423d62/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[Pipeline] {
[Pipeline] isUnix
[Pipeline] withEnv
[Pipeline] {
[Pipeline] sh
+ docker inspect -f . 【AWSアカウント】.dkr.ecr.【リージョン】.amazonaws.com/【リポジトリ名】:【タグ】
.
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] withDockerContainer
node does not seem to be running inside a container
$ docker run -t -d -u 1000:1000 -w /xxx/jenkins/workspace/【ジョブ名】 ()
$ docker top 78477694ba08dfb73053461c4846c9c9b56069b80206e2a1557fcf155bd50d78 -eo pid,comm
[Pipeline] {
()
[Pipeline] }
$ docker stop --time=1 78477694ba08dfb73053461c4846c9c9b56069b80206e2a1557fcf155bd50d78
$ docker rm -f 78477694ba08dfb73053461c4846c9c9b56069b80206e2a1557fcf155bd50d78
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // withDockerRegistry
[Pipeline] }
[Pipeline] // withEnv
  • WARNINGについて
    • WARNING! Your password will be stored unencrypted in /xxx/jenkins/workspace/xxx@tmp/1a1fd3c9-84f7-44ce-a102-3a035e423d62/config.json.
    • Jenkinsに登録した認証情報を使用しているため、パスワード********は手動ではなく自動でマスクされており、config.jsonも保存されません。そのため、今回このWARNINGは当てはまりません。
    • パスワードをべた書きした場合、当てはまるのかなと。


その他

パイプライン内でDocker buildしていると不要になったイメージが溜まるので、以下の削除も組み込んでいます。

sh "docker rmi 【リポジトリ名】:【タグ】"
sh "docker image prune -f"