第10章 Docker 中 Jenkins 的安装与配置
文章目录
前言
- 为什么要使用 Jenkins ?
具体请参考我的第05章内容。
- 什么是 Jenkins?
具体请参考我的第05章内容。
- 什么是 Docker?
具体请参考我的第08章内容。
- 为什么要在 Docker 中安装 Jenkins?
为了开发环境一致性、可移植性、易于管理和维护性。
目标
- 完成 Jenkins 在 Docker 中的安装与配置。
- 安装在 Docker 中的 Jenkins 能正常对外提供服务。
- 在外部开发环境中能正常访问和使用 Jenkins 持续集成服务。
环境
- **VMware:**VMware Workstation 14 Pro
- **Linux:**CentOS7.4
- **Docker:**18.06.0-ce, build 0ffa825
- **Jenkins:**Jenkins2.121.1
- **JDK:**jdk1.8.0_172
安装
Docker
Docker是一个在称为“容器”(或Docker容器)的隔离环境中运行应用程序的平台。像Jenkins这样的应用程序可以作为只读“镜像”(或Docker镜像)下载,每个应用程序都作为容器在Docker中运行。 Docker容器实际上是Docker镜像的“运行实例”。从这个角度来看,图像被或多或少地永久存储(即,只要发布镜像更新),而容器被临时存储。在Docker文档的入门指南,第1部分:方向和设置页面中阅读有关这些概念的更多信息 Getting Started, Part 1: Orientation and setup 。
Docker的基础平台和容器设计意味着可以在任何支持的操作系统(macOS,Linux和Windows)或运行Docker的云服务(AWS和Azure)上运行单个Docker映像(对于任何给定的应用程序,如Jenkins) 。
关于 Docker的安装与配置,具体请参考我的第08章内容。
在Docker中下载并运行Jenkins
Jenkins有几个Docker镜像可用。
建议使用的Docker镜像是 jenkinsci/blueocean
image (来自 Docker Hub repository )。此r镜像包含与所有Blue Ocean插件和功能捆绑在一起的Jenkins(可随时投入生产)的当前长期支持(LTS) Long-Term Support (LTS) release of Jenkins 版本。这意味着您无需单独安装Blue Ocean插件。
每次发布新版Blue Ocean时都会发布一个新的
jenkinsci/blueocean
镜像。您可以在标签页面上看到以前发布的jenkinsci /blueocean
镜像版本列表。您还可以使用其他Jenkins Docker镜像(可通过Docker Hub上的
jenkins/jenkins
访问)。但是,这些不适用于Blue Ocean,需要通过Jenkins中的Manage Jenkins > Manage Plugins 页面进行安装。在Blue Ocean入门( Getting started with Blue Ocean )中了解更多相关信息。
下载镜像并运行容器
下载jenkinsci/blueocean
镜像并使用以下docker run命令在Docker中将其作为容器运行:
sudo docker run \
-u root \
--rm \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
参数说明
1、–rm
(可选)在关闭时自动删除Docker容器(下面是jenkinsci/blueocean
映像的实例化)。如果您需要退出Jenkins,这可以保持整洁。
2、-d
(可选)在后台运行jenkinsci/blueocean
容器(即“分离”模式)并输出。
容器ID。如果未指定此选项,则会在终端窗口中输出正在运行的此容器的Docker日志。
3、-p
映射(即“发布”)jenkinsci/blueocean
容器的端口8080到主机上的端口8080。第一个数字表示主机上的端口,而最后一个表示容器的端口。因此,如果为此选项指定了-p 49000:8080,则将通过端口49000访问主机上的Jenkins。
4、-p
(可选)将jenkinsci/blueocean
容器的端口50000映射到主机上的端口50000。只有在其他计算机上设置了一个或多个基于JNLP的Jenkins代理时,才需要这样做, 它反过来与jenkinsci/blueocean
容器交互(充当“主”Jenkins服务器,或简称为“Jenkins master”)。基于JNLP的Jenkins代理默认通过TCP端口50000与Jenkins主机通信。
您可以通过“配置全局安全性”页面更改Jenkins主服务器上的此端口号。如果你要将JNSLP代理的Jenkins master的TCP端口值更改为51000(例如),那么你需要重新运行Jenkins(通过这个docker run …命令)并指定这个“发布”选项,例如 - p 52000:51000,其中最后一个值与Jenkins主服务器上的此更改值匹配,第一个值是Jenkins主服务器主机上的端口号,基于JNLP的Jenkins代理通过该端口号与Jenkins主服务器进行通信 - 即52000。
5、-v
(可选但强烈建议)将容器中的/var/jenkins_home
目录映射到名为jenkins-data
的Docker卷。如果此卷不存在,则此docker run命令将自动为您创建卷。 如果您希望每次重新启动Jenkins时都希望Jenkins状态保持不变(通过此docker run …命令),则需要此选项。如果未指定此选项,则Jenkins将在每次重新启动后有效地重置为新实例。
注意:jenkins数据卷也可以使用docker volume create命令独立创建:
docker volume create jenkins-data
您可以将此目录映射到计算机本地文件系统上的目录,而不是将
/var/jenkins_home
目录映射到Docker卷。例如,指定选项-v $ HOME/jenkins:/var/jenkins_home
会将容器的/var/jenkins_home
目录映射到本地计算机上$ HOME目录中的jenkins子目录,该子目录通常是/Users/<your-username>/jenkins
或/home/<your-username>/jenkins
。
6、-v
(可选)/var/run/docker.sock
表示Docker守护程序通过其侦听的基于Unix的 Socket。此映射允许jenkinsci/blueocean
容器与Docker守护程序通信,如果jenkinsci/blueocean
容器需要实例化其他Docker容器,则需要该守护程序。如果运行语法包含具有docker参数的代理程序部分的声明性管道,则此选项是必需的 - 即
agent {docker {...}}
。在 Pipeline Syntax 页面上阅读更多相关信息。
7、jenkinsci/blueocean
jenkinsci/blueocean
Docker镜像本身。如果尚未下载此映像,则此docker run命令将自动为您下载映像。此外,如果自上次运行此命令后发布了对此映像的任何更新,则再次运行此命令将自动为您下载这些已发布的映像更新。
注意:也可以使用
docker pull
命令独立下载(或更新)此Docker镜像:
docker pull jenkinsci/blueocean
注意:以下是我的安装运行命令,请尝试复制并粘贴此无注释版本:
sudo docker run \
-u root \
--name jenkins \
--rm \
-d \
-p 8082:8082 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
安装过程与结果如下:
$ sudo docker run \
> -u root \
> --rm \
> -d \
> -p 8082:8082 \
> -v jenkins-data:/var/jenkins_home \
> -v /var/run/docker.sock:/var/run/docker.sock \
> jenkinsci/blueocean
Unable to find image 'jenkinsci/blueocean:latest' locally
latest: Pulling from jenkinsci/blueocean
8e3ba11ec2a2: Pull complete
311ad0da4533: Pull complete
df312c74ce16: Pull complete
fa12f39dbf9b: Pull complete
5e2bfe6e0b85: Pull complete
dcc378c45959: Pull complete
6168b5a9b059: Pull complete
b565cf385df2: Pull complete
2d2686a6be13: Pull complete
3d837057ffd5: Pull complete
a9c46c3a3555: Pull complete
a989f45875e3: Pull complete
40460b4b9619: Pull complete
20a73c4ba560: Pull complete
fec014e5ba66: Pull complete
7a82cb3e4138: Pull complete
Digest: sha256:102b2cc94569d7f1f38f5473462ea3748edf0d8e9d70288616bbd1e5e6c68be3
Status: Downloaded newer image for jenkinsci/blueocean:latest
7a46a653df27097c7daf4a3ba60ee51a19923c5232efafb81019ae196dcada37
开放端口
## 打开 8082 端口
[ringyin@node1 ~]$ sudo firewall-cmd --zone=public --add-port=8082/tcp --permanent
[ringyin@node1 ~]$ sudo firewall-cmd --reload ## 重启防火墙
继续安装后设置向导
相关的设置向导与在虚拟机安装配置一样,具体参考我的第05章内容,也可参考官方文档,链接地址: Post-installation setup wizard
访问Jenkins/Blue Ocean Docker容器
如果您对Docker有一些经验,并且希望或需要使用docker exec命令通过终端/命令提示符访问jenkinsci/blueocean
容器,则可以添加一个选项,如--name jenkins-blueocean
(上面运行的docker) ,这将给jenkinsci/blueocean
容器命名为“jenkins-blueocean
”。
这意味着您可以使用docker exec命令访问容器(通过单独的终端/命令提示符窗口),如:
sudo docker exec -it jenkins-blueocean bash
可以修改我们想要的容器名称。
列出所有容器
$ sudo docker ps
CONTAINER ID IMAGE ... PORTS NAMES
7a46a653df27 jenkinsci/blueocea ... 8080/tcp, 50000/tcp, 0.0.0.0:8082->8082/tcp modest_raman
重命名容器称
$ sudo docker rename modest_raman jenkins
退出容器
如果要正常退出不关闭容器并保持容器运行状态,请按Ctrl+P+Q进行退出容器。
$ Ctrl+P+Q
如果使用exit退出,那么在退出之后会关闭容器,可以使用下面的流程进行恢复
-
使用docker restart命令重启容器
$ sudo docker restart jenkins
-
使用docker attach命令进入容器
$ sudo docker attach jenkins
通过Docker日志访问Jenkins控制台日志
您可能需要访问Jenkins控制台日志,例如,在安装后设置向导(Post-installation setup wizard. )中 Unlocking Jenkins 时。
如果您没有使用上面的docker run ...
命令指定分离模式选项-d
,则可以通过运行此Docker命令的终端/命令提示符窗口轻松访问Jenkins控制台日志。
否则,您可以使用以下命令通过jenkinsci/blueocean
容器的Docker日志访问Jenkins控制台日志:
$ sudo docker logs jenkins
您可以使用docker ps
命令获取<docker-container-name>
。如果你指定了 - 上面的docker run ...
命令中的--name jenkins-blueocean
选项(另请参阅 Accessing the Jenkins/Blue Ocean Docker container 容器),您只需使用docker logs命令:
$ sudo docker logs jenkins
访问Jenkins主目录
例如,您可能需要访问Jenkins主目录,以检查workspace
子目录中Jenkins构建的详细信息。
如果您将Jenkins主目录(/var/jenkins_home
)映射到计算机本地文件系统上的目录(即上面的docker run ...
命令),那么您可以通过计算机的常用终端/命令提示符访问该目录的内容。
否则,如果在docker run …命令中指定了-v jenkins-data:/var/jenkins_home
选项,则可以使用docker exec
命令通过jenkinsci/blueocean
容器的终端/命令提示符访问Jenkins主目录的内容:
$ sudo docker exec -it <docker-container-name> bash
如上所述,可以使用docker ps
命令获取<docker-container-name>
。如果你指定了 - 上面的docker run ...
命令中的--name jenkins-blueocean
选项(另请参阅访问Jenkins / Blue Ocean Docker容器),您只需使用docker exec
命令:
$ sudo docker exec -it jenkins-blueocean bash
WAR文件
Jenkins的Web应用程序ARchive(WAR)文件版本可以安装在支持Java的任何操作系统或平台上。
要下载并运行Jenkins的WAR文件版本:
- 将最新的稳定Jenkins WAR文件(latest stable Jenkins WAR file)下载到计算机上的相应目录中。
- 打开下载目录的终端/命令提示符窗口。
- 运行命令
java -jar jenkins.war
。 - 浏览到
http://localhost:8080
并等待Unlock Jenkins页面出现。 - 继续下面的安装后设置向导(Post-installation setup wizard )。
笔记:
- 与在Docker中使用Blue Ocean下载和运行Jenkins(上图)不同,此过程不会自动安装Blue Ocean功能,需要通过Jenkins中的 Manage Jenkins > Manage Plugins 页面单独安装。在Blue Ocean入门页面上阅读有关安装Blue Ocean( Getting started with Blue Ocean)的详细信息。
e Ocean功能,需要通过Jenkins中的 Manage Jenkins > Manage Plugins 页面单独安装。在Blue Ocean入门页面上阅读有关安装Blue Ocean( Getting started with Blue Ocean)的详细信息。- 您可以在运行
java -jar jenkins.war
命令时通过指定--httpPort
选项来更改端口。例如,要通过端口9090访问Jenkins,请使用以下命令运行:java -jar jenkins.war --httpPort=9090