CI/CD入門
このぺーじでは、katacodaと呼ばれる「ブラウザから無料で勉強用のインスタンスを起動できるWebサービス」を利用してCI/CDを実践します
内容は上記リンクに沿うので、不明点があればそちらへどうぞ
jenkinsによるdockerコンテナのbuild - Building Docker Images using Jenkins
ここでは、CI/CDの中心となるjenkinsの利用例を紹介
このシナリオで学習することをさっと確認する場合は概要を確認
理解に間違い等がございましたら、ぜひご指摘ください
概要
- jenkinsによるコンテナbuildには下記の手順を踏む
1. 特定のpluginをインストール
2. pluginの設定
3. jenkins agentの設定
4. jenkins agentに実行させるprojectの作成
5. project実行
Launch Jenkins
まず下記コマンドを実行しjenkinsをdockerコンテナとして実行
docker run -d -u root --name jenkins \ //バックグラウンド実行、rootユーザ、コンテナ名"jenkins"
-p 8080:8080 -p 50000:50000 \ //8080番ポートはweb dashboard、50000番はjenkins agentとの疎通用
-v /root/jenkins_2112:/var/jenkins_home \ //ホスト側のマウントpath及びコンテナ側のpath
jenkins/jenkins:2.112-alpine
今回はホスト端末が別に存在している
アクセスする場合は、ssh接続
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6048602eb5b9 jenkins/jenkins:2.112-alpine "/sbin/tini -- /usr/…" 2 minutes ago Up2 minutes 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp jenkins
コンテナが正常に既往していることを確認後、こちらのリンクから移動(デフォルト)
ログインには、admin
、344827fbdbfb40d5aac067c7a07b9230
環境はこのようになっている
Configure Docker Plugin
ここでは、Docker pluginを設定する
Docker pluginを設定することで、jenkinsがdockerデーモンとの通信をagentを介して実現(以下の概略図参照)
dashboard上で以下の通りクリックしていく
Manage Jenkins > Manage Plugins > availableタブのDocker > Install without Restart
このpluginはクラウドプロバイダーとして扱われる
dockerホストと通信するときのみコンテナ(jenkins agent)は起動する
Add Docker Agent
ここでは、先ほど用意したagentに「コンテナを起動させる」構成を設定
dashboard上で以下の通りクリックしていく
Manage Jenkins > Configure System > Add a new cloudから"Docker" > Docker Host URIにtcp://172.17.0.67:2345
(docker server)を入力
この手順でDocker daemonとの疎通が成功
確認する場合は、Docker Host URIのTest Connection
の結果とコンソール上でdocker version
と打ち込んだ際の結果を比較
$ docker version
Client:
Version: 18.05.0-ce
API version: 1.37
Go version: go1.9.5
Git commit: f150324
Built: Wed May 9 22:16:25 2018
OS/Arch: linux/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.03.0-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.10
Git commit: 0520e24302
Built: Fri Mar 23 01:48:12 2018
OS/Arch: linux/amd64
Experimental: false
続いて、agentコンテナを設定
- Docker Agent templates
- Add Docker Template
- agentのlabel記入
docker-agent
- コンテナイメージ記入
benhall/dind-jenkins-agent:v2
- volumeのマウント設定
/var/run/docker.sock:/var/run/docker.sock
- agentコンテナとの接続方法指定
Connect with SSH
- save
Create Build Project
ここでは、先ほどの"jenkins-agent"を用いて実行するコンテナの設定を行う
手順は以下の通り
-
Create new jobs
でジョブの作成 -
Freestyle project
を選択し、プロジェクト名として"Katacoda Jenkins Demo" - コンテナ作成に当たって、Docker daemonに要求を出せる"dokcer-agent"(先の手順で作成)を選択
- 実行するコンテナイメージとしてGitレポジトリを指定
-
Add Build Step
からExecute Shell
を選択し、buildの詳細を以下のように記述し、Save
ls
docker info
docker build -t katacoda/jenkins-demo:${BUILD_NUMBER} .
docker tag katacoda/jenkins-demo:${BUILD_NUMBER} katacoda/jenkins-demo:latest
docker images
Build Project
ここでは、dashboardから実際にjenkinsによるコンテナbuildを実行
Build Now
をクリック
jenkinsコンテナからjenkins-agentコンテナが起動され、そこからGitのdockerfileをもとにコンテナを起動するので多少時間がかかる
時折、pending—Jenkins doesn’t have label docker-agent
というエラーがdashboardに表示されることもある
View Console Output
コンテナの起動がjenkinsから確認出来たら、コンソールでコンテナをrunする
$ docker run -d -p 80:80 katacoda/jenkins-demo:latest
~~~
$ curl host01
<h1>This request was processed by host: </h1>
docke image
でコンテナイメージを確認
benhall/dind-jenkins-agent
はdocker-agentイメージのこと
katacoda/jenkins-demo
はjenkinsによるコンテナの作成をしめしている
また、TAG
の部分に着目すると、1,2,latest
の三つが用意されている
これは、"Create Build Project"の手順5にて、${BUILD_NUMBER}
をタグとして管理し、jenkinsによるコンテナbuildの処理が二回行われたことを意味する