Jenkins and Docker
Docker で Jenkins master を構築します。
1. Docker Desktop install
*Docker Desktop の環境がある方はこの作業は不要です。
Docker Desktop for Mac and Windows | Docker に移動して対象の環境を選択してください。
Windows の場合、Download for Windows(stable)を選択。
ダウンロード後、ダンロードしたファイルを実行してください、インストール後再起動が必要です。
2. Official Jenkins master image setup
Docker のイメージとして Official Jenkins master image for Docker を利用します。
参考情報:
jenkins/jenkins - Docker Hub
補足情報:
Visual Studio Code を利用されている方は Microsoft 公式の Docker 拡張を利用してもらっても構いませんが、
当手順はコンソールを利用します。
他のツール、拡張機能についても同様です。
Docker - Visual Studio Marketplace
2.1 Docker image download
コマンドプロンプト、ターミナルで次を実行。
(プロンプトは全て >
で表記しています。)
docker pull jenkins/jenkins:lts
(LTS 版を指定します。) :
> docker pull jenkins/jenkins:lts
lts: Pulling from jenkins/jenkins
3192219afd04: Pull complete
17c160265e75: Pull complete
cc4fe40d0e61: Pull complete
9d647f502a07: Pull complete
d108b8c498aa: Pull complete
1bfe918b8aa5: Pull complete
dafa1a7c0751: Pull complete
778e8430be10: Pull complete
f691085434e7: Pull complete
c773ad417853: Pull complete
588c47e03ebf: Pull complete
188896fc235c: Pull complete
531c409665fe: Pull complete
7d45f079f587: Pull complete
bf743b158a31: Pull complete
8dcb6fcd107c: Pull complete
485a955ebd4a: Pull complete
822b6d40c0ee: Pull complete
36b4ce80355f: Pull complete
Digest: sha256:0e8912b04f962b258ff9f51fb85fd1a9c5458e9d6e2f84aee747d765de0b7b70
Status: Downloaded newer image for jenkins/jenkins:lts
docker.io/jenkins/jenkins:lts
2.2 Docker image を確認する
docker images
:
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jenkins/jenkins lts 60f81923d099 9 days ago 658MB
2.3 Jenkins image を起動する
*初回のみ
docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
:
> docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
Running from: /usr/share/jenkins/jenkins.war
webroot: EnvVars.masterEnvVars.get("JENKINS_HOME")
2020-06-27 10:37:51.316+0000 [id=1] INFO org.eclipse.jetty.util.log.Log#initialized: Logging initialized @519ms to org.eclipse.jetty.util.log.JavaUtilLog
2020-06-27 10:37:51.456+0000 [id=1] INFO winstone.Logger#logInternal: Beginning extraction from war file
2020-06-27 10:37:52.492+0000 [id=1] WARNING o.e.j.s.handler.ContextHandler#setContextPath: Empty contextPath
2020-06-27 10:37:52.542+0000 [id=1] INFO org.eclipse.jetty.server.Server#doStart: jetty-9.4.27.v20200227; built: 2020-02-27T18:37:21.340Z; git: a304fd9f351f337e7c0e2a7c28878dd536149c6c; jvm 1.8.0_242-b08
2020-06-27 10:37:52.811+0000 [id=1] INFO o.e.j.w.StandardDescriptorProcessor#visitServlet: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet
2020-06-27 10:37:52.873+0000 [id=1] INFO o.e.j.s.s.DefaultSessionIdManager#doStart: DefaultSessionIdManager workerName=node0
2020-06-27 10:37:52.873+0000 [id=1] INFO o.e.j.s.s.DefaultSessionIdManager#doStart: No SessionScavenger set, using defaults
2020-06-27 10:37:52.879+0000 [id=1] INFO o.e.j.server.session.HouseKeeper#startScavenging: node0 Scavenging every 660000ms
2020-06-27 10:37:53.212+0000 [id=1] INFO hudson.WebAppMain#contextInitialized: Jenkins home directory: /var/jenkins_home found at: EnvVars.masterEnvVars.get("JENKINS_HOME")
2020-06-27 10:37:53.342+0000 [id=1] INFO o.e.j.s.handler.ContextHandler#doStart: Started w.@9573b3b{Jenkins v2.235.1,/,file:///var/jenkins_home/war/,AVAILABLE}{/var/jenkins_home/war}
2020-06-27 10:37:53.391+0000 [id=1] INFO o.e.j.server.AbstractConnector#doStart: Started ServerConnector@69c81773{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
2020-06-27 10:37:53.392+0000 [id=1] INFO org.eclipse.jetty.server.Server#doStart: Started @2595ms
2020-06-27 10:37:53.395+0000 [id=20] INFO winstone.Logger#logInternal: Winstone Servlet Engine running: controlPort=disabled
2020-06-27 10:37:54.525+0000 [id=27] INFO jenkins.InitReactorRunner$1#onAttained: Started initialization
2020-06-27 10:37:54.546+0000 [id=27] INFO jenkins.InitReactorRunner$1#onAttained: Listed all plugins
2020-06-27 10:37:55.573+0000 [id=27] INFO jenkins.InitReactorRunner$1#onAttained: Prepared all plugins
2020-06-27 10:37:55.579+0000 [id=28] INFO jenkins.InitReactorRunner$1#onAttained: Started all plugins
2020-06-27 10:37:55.593+0000 [id=26] INFO jenkins.InitReactorRunner$1#onAttained: Augmented all extensions
2020-06-27 10:37:56.041+0000 [id=28] INFO jenkins.InitReactorRunner$1#onAttained: System config loaded
2020-06-27 10:37:56.042+0000 [id=27] INFO jenkins.InitReactorRunner$1#onAttained: System config adapted
2020-06-27 10:37:56.044+0000 [id=27] INFO jenkins.InitReactorRunner$1#onAttained: Loaded all jobs
2020-06-27 10:37:56.044+0000 [id=25] INFO jenkins.InitReactorRunner$1#onAttained: Configuration for all jobs updated
2020-06-27 10:37:56.078+0000 [id=41] INFO hudson.model.AsyncPeriodicWork#lambda$doRun$0: Started Download metadata
2020-06-27 10:37:56.106+0000 [id=41] INFO hudson.util.Retrier#start: Attempt #1 to do the action check updates server
2020-06-27 10:37:57.242+0000 [id=26] INFO o.s.c.s.AbstractApplicationContext#prepareRefresh: Refreshing org.springframework.web.context.support.StaticWebApplicationContext@19ac6b51: display name [Root WebApplicationContext]; startup date [Sat Jun 27 10:37:57 UTC 2020]; root of context hierarchy
2020-06-27 10:37:57.242+0000 [id=26] INFO o.s.c.s.AbstractApplicationContext#obtainFreshBeanFactory: Bean factory for application context [org.springframework.web.context.support.StaticWebApplicationContext@19ac6b51]: org.springframework.beans.factory.support.DefaultListableBeanFactory@582ab955
2020-06-27 10:37:57.256+0000 [id=26] INFO o.s.b.f.s.DefaultListableBeanFactory#preInstantiateSingletons: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@582ab955: defining beans [authenticationManager]; root of factory hierarchy
2020-06-27 10:37:57.532+0000 [id=26] INFO o.s.c.s.AbstractApplicationContext#prepareRefresh: Refreshing org.springframework.web.context.support.StaticWebApplicationContext@18ba1779: display name [Root WebApplicationContext]; startup date [Sat Jun 27 10:37:57 UTC 2020]; root of context hierarchy
2020-06-27 10:37:57.532+0000 [id=26] INFO o.s.c.s.AbstractApplicationContext#obtainFreshBeanFactory: Bean factory for application context [org.springframework.web.context.support.StaticWebApplicationContext@18ba1779]: org.springframework.beans.factory.support.DefaultListableBeanFactory@f2523c9
2020-06-27 10:37:57.533+0000 [id=26] INFO o.s.b.f.s.DefaultListableBeanFactory#preInstantiateSingletons: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@f2523c9: defining beans [filter,legacy]; root of factory hierarchy
2020-06-27 10:37:57.848+0000 [id=26] INFO jenkins.install.SetupWizard#init:
*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
27feeebe9c8248c595a36e6a1f4ddc93
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************
2020-06-27 10:38:04.119+0000 [id=41] INFO h.m.DownloadService$Downloadable#load: Obtained the updated data file for hudson.tasks.Maven.MavenInstaller
2020-06-27 10:38:04.120+0000 [id=41] INFO hudson.util.Retrier#start: Performed the action check updates server successfully at the attempt #1
2020-06-27 10:38:04.122+0000 [id=41] INFO hudson.model.AsyncPeriodicWork#lambda$doRun$0: Finished Download metadata. 8,039 ms
2020-06-27 10:38:05.344+0000 [id=25] INFO jenkins.InitReactorRunner$1#onAttained: Completed initialization
2020-06-27 10:38:05.363+0000 [id=19] INFO hudson.WebAppMain$3#run: Jenkins is fully up and running
Please use the following password to proceed to installation:
の次の行の出力内容をメモしておく、今回の場合は
27feeebe9c8248c595a36e6a1f4ddc93
補足:
3 Jenkins Getting Started
ブラウザから http://localhost:8080
にアクセス。
3.1 Unlock Jenkins
Unlock Jenkins が表示されますので、前項の出力内容を Administrator password に入力して右下の Continue ボタンをクリック。
補足:
3.2 Customize Jenkins
インストールするプラグインを提案と自分で選択する 2 択で聞いてきますが、
左の Install suggested plugins を選択してください。
*後でも追加、削除が可能です。
補足:
しばらく時間がかかります。
3.3 Create First Admin User
管理者ユーザの登録を行います。
全て必須入力です。
入力が終わったら、右下の Save and Continue をクリックしてください。
補足:
3.4 Instance Configuration
Jenkins の URL を設定します、この URL はビルド通知、パスワードを忘れた場合の通知等で利用されます。
*後でも変更可能です。
Save and Finish をクリックしてください。
3.5 Jenkins is ready!
以上で終了です。
4. Docker image (Jenkins) 停止方法
4.1 停止対象を調べる
docker ps -a
:
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
13920882163e jenkins/jenkins:lts "/sbin/tini -- /usr/…" 49 minutes ago Up 49 minutes 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp magical_albattani
出力されている CONTAINER ID をメモします。
この例ですと CONTAINER ID は 13920882163e です。
4.2 停止する
docker stop [CONTAINER ID]
:
> docker stop 13920882163e
13920882163e
4.3 停止しているか確認する
docker ps -a
:
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
13920882163e jenkins/jenkins:lts "/sbin/tini -- /usr/…" 54 minutes ago Exited (143) About a minute ago magical_albattani
STATUS に Exited と表示されていれば停止している状態です。
5. docker image (Jenkins) 起動方法
setup 済みの Jenkins image を起動する場合。
5.1 起動対象を調べる
docker ps -a
:
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
13920882163e jenkins/jenkins:lts "/sbin/tini -- /usr/…" 17 hours ago Exited (143) 16 hours ago magical_albattani
出力されている CONTAINER ID をメモします。
この例ですと CONTAINER ID は 13920882163e です。
5.2 起動する
docker start [CONTAINER ID]
:
> docker start 13920882163e
13920882163e
5.3 起動しているか確認する
docker ps -a
:
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
13920882163e jenkins/jenkins:lts "/sbin/tini -- /usr/…" 17 hours ago Up 6 minutes 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp magical_albattani
STATUS に Up が表示されていれば起動している状態です。
ブラウザから http://localhost:8080
にアクセスしてください。
6. Docker image を消したい場合
間違って docker run
してイメージが複数できて消したい場合。
6.1 削除対象を調べる
docker ps -a
:
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3dfa722930e6 jenkins/jenkins:lts "/sbin/tini -- /usr/…" About a minute ago Up About a minute 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp festive_chaplygin
13920882163e jenkins/jenkins:lts "/sbin/tini -- /usr/…" 17 hours ago Exited (143) 16 hours ago magical_albattani
出力されている CONTAINER ID をメモします。
この例ですと CONTAINER ID は 3dfa722930e6 です。
起動しているので先に停止します。
6.2 削除対象を停止する
停止済みの場合は飛ばして次へ。
docker stop [CONTAINER ID]
:
> docker stop 3dfa722930e6
3dfa722930e6
6.3 削除する
docker rm [CONTAINER ID]
:
> docker rm 3dfa722930e6
3dfa722930e6
6.4 削除されているか確認する
docker ps -a
:
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
13920882163e jenkins/jenkins:lts "/sbin/tini -- /usr/…" 17 hours ago Exited (143) 16 hours ago magical_albattani
削除した CONTAINER ID が出力されていなければ削除済みです。
商標について
当ドキュメントに記載されている会社名、システム名、製品名は一般に各社の登録商標または商標です。
なお、本文および図表中では、「™」、「®」は明記しておりません。
免責事項
当ドキュメント上の掲載内容については細心の注意を払っていますが、その情報に関する信頼性、正確性、完全性について保証するものではありません。
掲載された内容の誤り、および掲載された情報に基づいて行われたことによって生じた直接的、また間接的トラブル、損失、損害については、筆者は一切の責任を負いません。
また当ドキュメント、およびドキュメントに含まれる情報、コンテンツは、通知なしに随時変更されます。