第10章 Docker 中 Jenkins 的安装与配置

第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文件版本:

  1. 将最新的稳定Jenkins WAR文件(latest stable Jenkins WAR file)下载到计算机上的相应目录中。
  2. 打开下载目录的终端/命令提示符窗口。
  3. 运行命令java -jar jenkins.war
  4. 浏览到http://localhost:8080并等待Unlock Jenkins页面出现。
  5. 继续下面的安装后设置向导(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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值