Help us understand the problem. What is going on with this article?

Docker Compose & Jenkinsを使ってみた話

なんか「Jenkins」を使ってみたいと思ったんです。
そういう年頃なんです。
色々と面倒なのは勘弁なので、「Docker」を使って楽に環境構築することにしました。

ワイの環境

  • OS:Windows10

前提

  • Docker for Windows」がインストールされていること。

Jenkinsってこんなアイコンやで

jenkins8.JPG
ワイほどではないですが、ジェントルマンですね。

じゃあ環境構築するよ

じゃあ、早速やりましょう。
今回は「Docker Compose」を使います。
何やら、Jenkinsは「master-slave」構成が一般的らしく、今回はmasterしか作りませんが、「Docker Compose」の方が実用的かなと思ったので。

まずはフォルダを作る

任意の場所に「docker-jenkins」みたいなフォルダを作ります。
※フォルダ名も何でもいいです。

docker-compose.ymlを作成

以下のファイルを先ほどのフォルダ内に作成します。

docker-compose.yml
version: '3'

services:
  master:
    container_name: master
    image: jenkins:latest
    ports:
      - 18080:8080
    volumes:
      - ./jenkins_home:/var/jenkins_home

特に変わったことはせずに、jenkinsのイメージを使っています。
ポートは「18080」にしています。

Dockerコンテナを起動

C:\docker-jenkins> docker-compose up

コマンドを実行します。
よく「-d」オプションを付けてバックグラウンドで実行させますが、今回はフォアグラウンドで実行します。

実行結果

C:\docker-jenkins> docker-compose up
Creating master ... done                                                                                                Attaching to master
master    | Running from: /usr/share/jenkins/jenkins.war
master    | webroot: EnvVars.masterEnvVars.get("JENKINS_HOME")
master    | Feb 20, 2020 9:03:33 AM Main deleteWinstoneTempContents
master    | WARNING: Failed to delete the temporary Winstone file /tmp/winstone/jenkins.war
master    | Feb 20, 2020 9:03:33 AM org.eclipse.jetty.util.log.JavaUtilLog info
master    | INFO: Logging initialized @884ms
master    | Feb 20, 2020 9:03:33 AM winstone.Logger logInternal
master    | INFO: Beginning extraction from war file
master    | Feb 20, 2020 9:04:32 AM org.eclipse.jetty.util.log.JavaUtilLog warn
master    | WARNING: Empty contextPath
master    | Feb 20, 2020 9:04:32 AM org.eclipse.jetty.util.log.JavaUtilLog info
master    | INFO: jetty-9.2.z-SNAPSHOT
master    | Feb 20, 2020 9:04:35 AM org.eclipse.jetty.util.log.JavaUtilLog info
master    | INFO: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet
master    | Jenkins home directory: /var/jenkins_home found at: EnvVars.masterEnvVars.get("JENKINS_HOME")
master    | Feb 20, 2020 9:04:38 AM org.eclipse.jetty.util.log.JavaUtilLog info
master    | INFO: Started w.@47404bea{/,file:/var/jenkins_home/war/,AVAILABLE}{/var/jenkins_home/war}
master    | Feb 20, 2020 9:04:38 AM org.eclipse.jetty.util.log.JavaUtilLog info
master    | INFO: Started ServerConnector@1c80e49b{HTTP/1.1}{0.0.0.0:8080}
master    | Feb 20, 2020 9:04:38 AM org.eclipse.jetty.util.log.JavaUtilLog info
master    | INFO: Started @65859ms
master    | Feb 20, 2020 9:04:38 AM winstone.Logger logInternal
master    | INFO: Winstone Servlet Engine v2.0 running: controlPort=disabled
master    | Feb 20, 2020 9:04:40 AM jenkins.InitReactorRunner$1 onAttained
master    | INFO: Started initialization
master    | Feb 20, 2020 9:04:41 AM jenkins.InitReactorRunner$1 onAttained
master    | INFO: Listed all plugins
master    | Feb 20, 2020 9:04:45 AM jenkins.InitReactorRunner$1 onAttained
master    | INFO: Prepared all plugins
master    | Feb 20, 2020 9:04:45 AM jenkins.InitReactorRunner$1 onAttained
master    | INFO: Started all plugins
master    | Feb 20, 2020 9:04:45 AM jenkins.InitReactorRunner$1 onAttained
master    | INFO: Augmented all extensions
master    | Feb 20, 2020 9:04:48 AM jenkins.InitReactorRunner$1 onAttained
master    | INFO: Loaded all jobs
master    | Feb 20, 2020 9:04:49 AM hudson.model.AsyncPeriodicWork$1 run
master    | INFO: Started Download metadata
master    | Feb 20, 2020 9:04:50 AM jenkins.util.groovy.GroovyHookScript execute
master    | INFO: Executing /var/jenkins_home/init.groovy.d/tcp-slave-agent-port.groovy
master    | Feb 20, 2020 9:04:51 AM jenkins.InitReactorRunner$1 onAttained
master    | INFO: Completed initialization
master    | Feb 20, 2020 9:04:53 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
master    | INFO: Refreshing org.springframework.web.context.support.StaticWebApplicationContext@6913ea65: display name [Root WebApplicationContext]; startup date [Thu Feb 20 09:04:53 UTC 2020]; root of context hierarchy
master    | Feb 20, 2020 9:04:53 AM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
master    | INFO: Bean factory for application context [org.springframework.web.context.support.StaticWebApplicationContext@6913ea65]: org.springframework.beans.factory.support.DefaultListableBeanFactory@3765f1c9
master    | Feb 20, 2020 9:04:53 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
master    | INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@3765f1c9: defining beans [authenticationManager]; root of factory hierarchy
master    | Feb 20, 2020 9:04:54 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
master    | INFO: Refreshing org.springframework.web.context.support.StaticWebApplicationContext@61030fca: display name [Root WebApplicationContext]; startup date [Thu Feb 20 09:04:54 UTC 2020]; root of context hierarchy
master    | Feb 20, 2020 9:04:54 AM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
master    | INFO: Bean factory for application context [org.springframework.web.context.support.StaticWebApplicationContext@61030fca]: org.springframework.beans.factory.support.DefaultListableBeanFactory@4ab8811f
master    | Feb 20, 2020 9:04:54 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
master    | INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@4ab8811f: defining beans [filter,legacy]; root of factory hierarchy
master    | Feb 20, 2020 9:04:55 AM jenkins.install.SetupWizard init
master    | INFO:
master    |
master    | *************************************************************
master    | *************************************************************
master    | *************************************************************
master    |
master    | Jenkins initial setup is required. An admin user has been created and a password generated.
master    | Please use the following password to proceed to installation:
master    |
master    | ★★★ここやで★★★
master    |
master    | This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
master    |
master    | *************************************************************
master    | *************************************************************
master    | *************************************************************
master    |
master    | Feb 20, 2020 9:04:58 AM hudson.model.UpdateSite updateData
master    | INFO: Obtained the latest update center data file for UpdateSource default
master    | Feb 20, 2020 9:04:59 AM hudson.model.DownloadService$Downloadable load
master    | INFO: Obtained the updated data file for hudson.tasks.Maven.MavenInstaller
master    | --> setting agent port for jnlp
master    | --> setting agent port for jnlp... done
master    | Feb 20, 2020 9:05:03 AM hudson.model.UpdateSite updateData
master    | INFO: Obtained the latest update center data file for UpdateSource default
master    | Feb 20, 2020 9:05:03 AM hudson.model.DownloadService$Downloadable load
master    | INFO: Obtained the updated data file for hudson.tools.JDKInstaller
master    | Feb 20, 2020 9:05:03 AM hudson.model.AsyncPeriodicWork$1 run
master    | INFO: Finished Download metadata. 13,858 ms
master    | Feb 20, 2020 9:05:03 AM hudson.WebAppMain$3 run
master    | INFO: Jenkins is fully up and running

「★★★ここやで★★★」って書いてるところにシークレットキーが記載されているのでどこかにメモしておいてください。

Jenkinsが使えるところまでいくよ

ってことで、アクセスしてみます。

Jenkinsにアクセス

http://localhost:18080/
※docker-composeの設定で18080にしていたので、ポートは「18080」でアクセスします。

jenkins1.JPG
おっ!画面が出ましたね。
ってことで、先ほどメモしておいたシークレットキーを入力して、画面下部の「Continue」ボタンを押します。

jenkins2.JPG
今回は細かい設定をするつもりにないので、「Install suggested plugins」をクリックします。

jenkins3.JPG
え?....え?....。

Jenkinsのセットアップに失敗したのでググる

どうやらDockerイメージは「jenkins/jenkins:lts」らしい。
なんて日だ!!

docker-compose.ymlの修正

docker-compose.yml
version: '3'

services:
  master:
    container_name: master
    image: jenkins/jenkins:lts
    ports:
      - 18080:8080
    volumes:
      - ./jenkins_home:/var/jenkins_home

これでどうよ!!

だめや

Attaching to master
master    | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': No such file or directory
master    | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
master exited with code 1

ぽえええええええええ。
ぶちぎれナウ。

ディレクトリを変更してみる

docker-compose.yml
version: '3'

services:
  master:
    container_name: master
    image: jenkins/jenkins:lts
    ports:
      - 18080:8080
    volumes:
      - ./jenkins_home:/var/lib/jenkins_home

/var/jenkins_home」から「/var/lib/jenkins_home」にするとうまくいくという記事を見かけたのでその通りにしてみます。
いけええええええええええええええええええええええええええええええええええええええええい!!
※ただこれあれですね。ホスト側の「jenkins_home」に何もマウントされてこないので、ここら辺使う予定の人はだめかもね!

再度アクセス

どうやらうまくいったので再度アクセスします。
http://localhost:18080/

ここからシークレットキーとかを入れる手順は前と同じです。

俺の時代がきました

jenkins4.JPG
うまくいくとこの画面に来ます。
言い換えると、この画面が出ないということはセットアップに失敗しています。
ってことで、適当に入力して画面下部の「Save and Continue」をクリックします。

jenkins5.JPG
JenkinsのURLはこれでいいか?」と聞かれます。
それでよきに候なので「Save and Finish」をクリックします。

jenkins6.JPG
ポチっとな。

jenkins7.JPG
おわり!!

まとめ

なんもねーよ!!
じゃあな!!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした