Docker安装Jenkins
Jenkins 是一款由 Java 编写的开源的持续集成工具。在与 Oracle 发生争执后,项目从 Hudson 项目复刻。 Jenkins 提供了软件开发的持续集成服务。它运行在 Servlet 容器中(例如 Apache Tomcat)。它支持软件配置管理(SCM)工具(包括 AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase 和 RTC),可以执行基于 Apache Ant 和 Apache Maven 的项目,以及任意的 Shell 脚本和 Windows 批处理命令。Jenkins 的主要开发者是川口耕介。Jenkins 是在 MIT 许可证下发布的自由软件。 可以通过各种手段触发构建。例如提交给版本控制系统时被触发,也可以通过类似 Cron 的机制调度,也可以在其他的构建已经完成时,还可以通过一个特定的 URL 进行请求。 Wikipedia
安装 Jenkins
为了今后方便部署 Jenkins 本文使用 Docker 进行安装
搜索镜像
$ docker search jenkins
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
jenkins DEPRECATED; use "jenkins/jenkins:lts" instead 5324 [OK]
jenkins/jenkins The leading open source automation server 2692
jenkinsci/blueocean https://jenkins.io/projects/blueocean 640
jenkinsci/jenkins Jenkins Continuous Integration and Delivery … 391
jenkins/jnlp-slave a Jenkins agent which can connect to Jenkins… 148 [OK]
jenkinsci/jnlp-slave A Jenkins slave using JNLP to establish conn… 134 [OK]
jenkinsci/slave Base Jenkins slave docker image 66 [OK]
jenkins/slave base image for a Jenkins Agent, which includ… 48 [OK]
jenkinsci/ssh-slave A Jenkins SSH Slave docker image 44 [OK]
jenkins/ssh-slave A Jenkins slave using SSH to establish conne… 37 [OK]
cloudbees/jenkins-enterprise CloudBees Jenkins Enterprise (Rolling releas… 36 [OK]
h1kkan/jenkins-docker 🤖 Extended Jenkins docker image, bundled wi… 29
xmartlabs/jenkins-android Jenkins image for Android development. 28 [OK]
openshift/jenkins-2-centos7 A Centos7 based Jenkins v2.x image for use w… 23
cloudbees/jenkins-operations-center CloudBees Jenkins Operation Center (Rolling … 14 [OK]
jenkins/ssh-agent Docker image for Jenkins agents connected ov… 12
vfarcic/jenkins-swarm-agent Jenkins agent based on the Swarm plugin 8 [OK]
openshift/jenkins-slave-base-centos7 A Jenkins slave base image. DEPRECATED: see … 7
trion/jenkins-docker-client Jenkins CI server with docker client 6 [OK]
publicisworldwide/jenkins-slave Jenkins Slave based on Oracle Linux 5 [OK]
openshift/jenkins-1-centos7 DEPRECATED: A Centos7 based Jenkins v1.x ima… 4
ansibleplaybookbundle/jenkins-apb An APB which deploys Jenkins CI 1 [OK]
amazeeio/jenkins-slave A jenkins slave that connects to a master vi… 0 [OK]
jameseckersall/jenkins docker-jenkins (based on openshift jenkins 2… 0 [OK]
mashape/jenkins Just a jenkins image with the AWS cli added … 0 [OK]
可看到第一个为官方镜像, 但已弃用, DESCRIPTION 推荐使用jenkins/jenkins:lts
拉取镜像
用pull
从仓库拉取 Jenkins 镜像
$ docker pull jenkins/jenkins:lts
lts: Pulling from jenkins/jenkins
4c25b3090c26: Pull complete
750d566fdd60: Pull complete
2718cc36ca02: Pull complete
5678b027ee14: Pull complete
c839cd2df78d: Pull complete
50861a5addda: Pull complete
ff2b028e5cf5: Pull complete
ee710b58f452: Pull complete
2625c929bb0e: Pull complete
6a6bf9181c04: Pull complete
bee5e6792ac4: Pull complete
6cc5edd2133e: Pull complete
c07b16426ded: Pull complete
e9ac42647ae3: Pull complete
fa925738a490: Pull complete
4a08c3886279: Pull complete
2d43fec22b7e: Pull complete
Digest: sha256:a942c30fc3bcf269a1c32ba27eb4a470148eff9aba086911320031a3c3943e6c
Status: Downloaded newer image for jenkins/jenkins:lts
docker.io/jenkins/jenkins:lts
创建并启动容器
创建容器
- 将容器名设置为
jenkins
- 容器端口与主机端口进行同步绑定
- 主机
/var/jenkins_home
与容器目录映射
$ docker run --name jenkins -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home jenkins/jenkins:lts
Running from: /usr/share/jenkins/jenkins.war
webroot: EnvVars.masterEnvVars.get("JENKINS_HOME")
2021-09-30 13:14:27.804+0000 [id=1] INFO org.eclipse.jetty.util.log.Log#initialized: Logging initialized @491ms to org.eclipse.jetty.util.log.JavaUtilLog
2021-09-30 13:14:27.883+0000 [id=1] INFO winstone.Logger#logInternal: Beginning extraction from war file
2021-09-30 13:14:28.650+0000 [id=1] WARNING o.e.j.s.handler.ContextHandler#setContextPath: Empty contextPath
2021-09-30 13:14:28.694+0000 [id=1] INFO org.eclipse.jetty.server.Server#doStart: jetty-9.4.42.v20210604; built: 2021-06-04T17:33:38.939Z; git: 5cd5e6d2375eeab146813b0de9f19eda6ab6e6cb; jvm 11.0.12+7
2021-09-30 13:14:28.929+0000 [id=1] INFO o.e.j.w.StandardDescriptorProcessor#visitServlet: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet
2021-09-30 13:14:28.962+0000 [id=1] INFO o.e.j.s.s.DefaultSessionIdManager#doStart: DefaultSessionIdManager workerName=node0
2021-09-30 13:14:28.962+0000 [id=1] INFO o.e.j.s.s.DefaultSessionIdManager#doStart: No SessionScavenger set, using defaults
2021-09-30 13:14:28.963+0000 [id=1] INFO o.e.j.server.session.HouseKeeper#startScavenging: node0 Scavenging every 600000ms
2021-09-30 13:14:29.332+0000 [id=1] INFO hudson.WebAppMain#contextInitialized: Jenkins home directory: /var/jenkins_home found at: EnvVars.masterEnvVars.get("JENKINS_HOME")
2021-09-30 13:14:29.461+0000 [id=1] INFO o.e.j.s.handler.ContextHandler#doStart: Started w.@3a01773b{Jenkins v2.303.1,/,file:///var/jenkins_home/war/,AVAILABLE}{/var/jenkins_home/war}
2021-09-30 13:14:29.481+0000 [id=1] INFO o.e.j.server.AbstractConnector#doStart: Started ServerConnector@3f0846c6{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
2021-09-30 13:14:29.482+0000 [id=1] INFO org.eclipse.jetty.server.Server#doStart: Started @2170ms
2021-09-30 13:14:29.482+0000 [id=25] INFO winstone.Logger#logInternal: Winstone Servlet Engine running: controlPort=disabled
2021-09-30 13:14:29.667+0000 [id=32] INFO jenkins.InitReactorRunner$1#onAttained: Started initialization
2021-09-30 13:14:29.688+0000 [id=43] INFO jenkins.InitReactorRunner$1#onAttained: Listed all plugins
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$2 (file:/var/jenkins_home/war/WEB-INF/lib/guice-4.0.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$2
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2021-09-30 13:14:30.627+0000 [id=45] INFO jenkins.InitReactorRunner$1#onAttained: Prepared all plugins
2021-09-30 13:14:30.631+0000 [id=35] INFO jenkins.InitReactorRunner$1#onAttained: Started all plugins
2021-09-30 13:14:30.637+0000 [id=36] INFO jenkins.InitReactorRunner$1#onAttained: Augmented all extensions
2021-09-30 13:14:31.152+0000 [id=34] INFO jenkins.InitReactorRunner$1#onAttained: System config loaded
2021-09-30 13:14:31.153+0000 [id=35] INFO jenkins.InitReactorRunner$1#onAttained: System config adapted
2021-09-30 13:14:31.154+0000 [id=45] INFO jenkins.InitReactorRunner$1#onAttained: Loaded all jobs
2021-09-30 13:14:31.154+0000 [id=30] INFO jenkins.InitReactorRunner$1#onAttained: Configuration for all jobs updated
2021-09-30 13:14:31.166+0000 [id=58] INFO hudson.model.AsyncPeriodicWork#lambda$doRun$0: Started Download metadata
2021-09-30 13:14:31.176+0000 [id=58] INFO hudson.util.Retrier#start: Attempt #1 to do the action check updates server
2021-09-30 13:14:31.487+0000 [id=44] 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:
c0287527ff2d4f24b169f134334477d3
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************
2021-09-30 13:14:53.623+0000 [id=58] INFO h.m.DownloadService$Downloadable#load: Obtained the updated data file for hudson.tasks.Maven.MavenInstaller
2021-09-30 13:14:53.624+0000 [id=58] INFO hudson.util.Retrier#start: Performed the action check updates server successfully at the attempt #1
2021-09-30 13:14:53.626+0000 [id=58] INFO hudson.model.AsyncPeriodicWork#lambda$doRun$0: Finished Download metadata. 22,458 ms
2021-09-30 13:14:58.200+0000 [id=38] INFO jenkins.InitReactorRunner$1#onAttained: Completed initialization
2021-09-30 13:14:58.214+0000 [id=24] INFO hudson.WebAppMain$3#run: Jenkins is fully up and running
cc0287527ff2d4f24b169f134334477d3
就是默认的 admin 密码了
此时关闭终端 jenkins 自然会退出
启动容器
重新打开终端用 docker 启动jenkins
容器
$ docker start jenkins
jenkins
确认容器是否正常运行
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6246498b082a jenkins/jenkins:lts "/sbin/tini -- /usr/…" 14 minutes ago Up 12 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp jenkins
可以看到容器已经成功运行
Jenkins 初体验
启动 Jenkins
打开浏览器地址栏输入localhost:8080
即可进入 jenkins
配置 Jenkins(Getting Started)
首次登陆 Jenkins 会进入默认配置向导
解锁以进行下一步配置(Unlock Jenkins)
为确保管理员登陆需要输入管理员密码(为初次构建容器输出时密码)
管理员密码也保存在容器的/var/jenkins_home/secrets/initialAdminPassword
自定义你的扩展补丁(Customize Jenkins)
有两种选项供我们选择, 由于不是特殊使用我个人选择第一项安装推荐补丁
- Install suggested plugins
- Select plugins to install
下面就是进行安装补丁过程(需要 7-8 分钟的时间)
包括一些常用的如 Git, SSH, Email Extension, Ant, Gradle 等工具
配置管理员信息(Setup of an admin user)
这里添加一些管理员信息如密码等(可以跳过)
后续 Jenkins URL 也跳过
点击 Start Using Jenkins 即可使用 Jenkins