はじめに
JenkinsをDokerコンテナで動かすのではなく、JenkinsのパイプラインをECRに登録したイメージで実行します。
環境
インストールするプラグイン
- Amazon ECRプラグイン
- 認証情報の種類にAWS Credentialsが追加され、Access Key IDとSecret Access Keyが登録できます。
- Amazon ECR | Jenkins plugin
- DockerPipelineプラグイン
設定手順
- Jenkinsの管理->認証情報より、ECRの認証情報を登録します。
- dockerグループに、パイプラインを実行するSSHユーザを追加します。
- パイプラインの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について
その他
パイプライン内でDocker buildしていると不要になったイメージが溜まるので、以下の削除も組み込んでいます。
sh "docker rmi 【リポジトリ名】:【タグ】" sh "docker image prune -f"