※KDDIコマースフォワード㈱ 、略称「KCF」は2019年4月1日、同グループ会社の㈱ルクサと合併し「auコマース&ライフ株式会社」として再設立いたしました。 本記事は2019年3月31日以前に書かれた記事のアーカイブとなります。予めご了承ください。
エンジニアの土田です。
今はシステムリプレイスからDMP構築に業務が変わり、データ収集に勤しんでいます。
JenkinsでのECRデプロイ
JenkinsでのECRデプロイ方法を調べていたところ、パイプラインジョブを使った記事はいくつか見つかったのですが、 昔ながらのフリースタイルジョブでの手順が見当たらなかったので、今回はその方法を記載します。
作業概要
実現のためには、以下を行う必要があります。
- ECRにアクセスするためのアクセスキー発行
- JenkinsサーバにDockerをインストール
- JenkinsサーバにAWS CLIをインストール
- Jenkinsに必要なプラグインのインストールと設定
- Jenkinsでデプロイ用のジョブ作成
Jenkinsサーバの設定
まだ、JenkinsでDockerを使っていない場合は、JenkinsにDockerをインストールしてください。
インストールできたら、Jenkinsの実行ユーザ(通常はjenkins)をdockerグループに所属させます。
$ sudo usermod -a -G docker jenkins $ sudo systemctl restart jenkins
これで、JenkinsからDockerが利用できるようになります。
次に、JenkinsジョブからAWS CLIを使うためのプロファイルを作成します。
※AWS CLIのインストールは以下のリンク参照
sudo -u jenkins aws configure --profile プロファイル名
実行すると以下のように問われるので、適時入力してください。
AWS Access Key ID [None]: アクセスキー AWS Secret Access Key [None]: シークレットアクセスキー Default region name [None]: ap-northeast-1 Default output format [None]: json
これで、サーバ側での設定は終了です。
Jenkinsの設定
ここからはJenkinsのWeb画面の設定になります。
JenkinsからECRにイメージ登録するためには、以下のプラグインが必要になるので、こちらをインストールします。
Dockerプラグインの設定
Jenkinsの管理からシステムの設定を開き、『クラウド』の項目でDockerを追加し、設定をしてきます。
といってもName以外はDocker Host URIが最低限設定できていれば問題ありません。
設定値はCentOSであれば
unix:///var/run/docker.sock
になると思います。
認証情報の設定
ECRにイメージ登録をするためのアクセスキーの情報を、Jenkinsの認証情報として登録します。
認証情報を登録する際は、認証情報をジョブから利用できるスコープが選択できます。 フォルダから認証情報のページに遷移すると、『Stores scoped to フォルダ名』のような項目があるので、 スコープ設定をしたい場合は、そこから遷移した先で認証情報を追加すると良いです。
認証情報の追加で、AWS Credentials
を選択し、先程のアクセスキー情報を設定してください。
フリースタイルジョブの作成
いよいよジョブ作成です。
まずはソースコード管理に、作成するコンテナイメージを作るDockerfileが記載されたリポジトリを指定します。
次に、ビルド項目の『ビルド手順の追加』からBuild / Publish Docker Image
を選択します。
『Build / Publish Docker Image』は以下のようになっているので、高度な設定ボタンを押下し、すべての項目を表示させてください。
各項目に設定する値は以下のようになります。
項目 | 値 |
---|---|
Directory for Dockerfile | コードリポジトリのルートからたどってDockerfileのある場所 |
Docker registry URL | https://ECRリポジトリのURI |
Registry credentials | ECRリポジトリの存在するリージョンの入ったキー情報 |
Cloud | システム設定のクラウドで追加したDocker設定の名前 |
Image | ECRのプッシュコマンドで指定されるタグ名 |
Push image | チェックする |
Registry Credentials | 上記のクレデンシャルと同じ |
これらの値を設定した画面が以下です。
これで設定は完了です。
あとはこのジョブを実行すると、コンテナイメージが作成され、そのイメージがECRへ登録されます。
ECRのイメージへ独自タグの追加
コンテナイメージの運用をしていると独自のタグが必要になると思いますが、 今のところECRのコンソールからタグ追加はできないので、これもついでにJenkinsで行ってしまいましょう。
Jenkinsのシェル実行で、以下のようなタグ追加のCLIコマンドを記載してください。
$(aws ecr get-login --no-include-email --region ap-northeast-1 --profile 作成したプロファイル名) MANIFEST=$(aws ecr batch-get-image --repository-name ECRのリポジトリ名 --image-ids imageTag=latest --query images[].imageManifest --output text --profile 作成したプロファイル名) aws ecr put-image --repository-name ECRのリポジトリ名 --image-tag 付与するタグ名 --profile 作成したプロファイル名 --image-manifest "$MANIFEST"
必要なのはこれだけです。
まとめ
冒頭に書いたように、パイプラインを使って行う記事はあったのですが、昔ながらのやり方でやる方法がなかったのでまとめてみました。
Jenkinsはパイプラインが出てきてからGUIを使わないやり方が推されている感じがしますが、昔ながらのやり方もわかりやすくて良いと思うので、
状況にあわせて使っていきたいです。
ちなみにこれらの内容はAWS Batchで使うイメージのプッシュと、本番環境で参照するイメージ切り替えのためのタグ追加に利用しています。 プッシュして、開発でテストが終わったら本番用のタグを付与、といった感じで運用しています。