Jenkins 入门教程之二 Jenkins 与 SVN 搭建 CI-CD 环境

前言

本教程实战演示基于 SVN + Jenkins + Maven + JDK + Docker 搭建 CI/CD 环境,其中 SVN 基于 Debian 镜像手动安装,而 Jenkins、Maven、JDK 则基于 Tomcat 镜像手动安装。如果仅为了快速体验使用 Jenkins 的功能,可以直接 Pull Jenkins 官方的 Docker 镜像,然后创建并启动 Docker 容器来体验 Jenkins 相关功能,此时可忽略下面教程中的大部分操作步骤。

Docker 环境安装与配置

基于 Docker 搭建 SVN 服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 拉取Debian镜像
# docker pull debian

# 创建并启动容器,80是Apache端口,3690是Subversion端口,/var/lib/svn是所有SVN仓库的父目录
# docker run -it -p 9126:80 -p 4690:3690 --name svn-httpd \
-v /container/svn-server:/var/lib/svn \
-d debian

# 连接容器
# docker exec -it svn-httpd /bin/bash

# 修改系统时间
# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 参考上面给出的本站教程,使用Apache、Subversion搭建SVN服务器

# 断开容器连接,不停止运行容器
# ctrl + p + q

# 最后如果Subversion容器能正常工作,建议执行commit操作生成Docker备份镜像
# docker commit -a "clay@gmail.com" -m "commit jenkins-svn-httpd image" svn-httpd clay/jenkins-svn-httpd:1.0

基于 Docker 搭建 Tomcat 服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 拉取Tomcat8的镜像
# docker pull tomcat:8

# 创建并启动容器
# docker run -p 8888:8080 --name tomcat8 \
-v /container/tomcat8/logs:/usr/local/tomcat/logs \
-d tomcat:8

# 连接容器
# docker exec -it tomcat8 /bin/bash

# 更新系统并安装常用软件,Docker官方的Tomcat镜像默认安装了Open-JDK、Tomcat Native、APR,具体安装细节可以参考官方镜像的Dockerfile文件
# apt-get -y update
# apt-get -y upgrade
# apt-get -y install git vim htop telnet net-tools

# 修改系统时间
# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 配置Tomcat8的管理用户,编辑Tomcat8对应的配置文件,在<tomcat-users>标签内添加以下内容
# vim /usr/local/tomcat/conf/tomcat-users.xml
<tomcat-users>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="123456" roles="admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status"/>
</tomcat-users>

# 关于Tomcat配置管理用户,不同版本的Tomcat配置方法有差异,上面仅演示Tomcat8版本的配置方法。
# 由于Tomcat8默认启用了网段限制,默认只有127网段局域网的机器才拥有有访问权限,如果是其他网段登陆,如172,10网段会报403错误,因此需要按照下面的方法修改对应的context.xml配置文件。
# 出于安全考虑,在生产环境中建议启用默认的网段限制,即只允许在本地访问Tomcat服务器的管理页面。

# 编辑manager项目下的META-INF/context.xml配置文件,将<Valve>标签的内容替换为以下文本
# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

# 编辑host-manager项目下的META-INF/context.xml配置文件,将<Valve>标签的内容替换为以下文本
# vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

# 断开容器连接
# exit

# 重启容器使配置生效
# docker restart tomcat8

# 通过浏览器访问Tomcat的管理页面,测试是否配置成功

# 最后如果Tomcat容器能正常工作,建议执行commit操作生成Docker备份镜像
# docker commit -a "clay@gmail.com" -m "commit jenkins-server image" tomcat8 clay/jenkins-server:1.0

Tomcat 容器内安装与配置 Oracle JDK、Maven

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 提示:这里安装的Oracle JDK、Maven,在后面Jenkins的全局工具配置中会用到

# 连接容器
# docker exec -it tomcat8 /bin/bash

# 下载Oracle JDK8
# wget -P /usr/local --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3a%2F%2Fwww.oracle.com%2Ftechnetwork%2Fjava%2Fjavase%2Fdownloads%2Fjdk8-downloads-2133151.html; oraclelicense=accept-securebackup-cookie;" "https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk1.8.0_201-linux-x64.tar.gz"

# 解压Oracle JDK8
# tar -xvf /usr/local/jdk1.8.0_201-linux-x64.tar.gz

# 下载Maven
# wget -P /usr/local/ http://mirrors.shu.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz

# 解压Maven
# tar -xvf /usr/local/apache-maven-3.6.0-bin.tar.gz

# 删除下载文件
# rm /usr/local/jdk1.8.0_201-linux-x64.tar.gz
# rm /usr/local/apache-maven-3.6.0-bin.tar.gz

# 创建Java命令的软链接,如果安装了Open-JDK,会覆盖Open-JDK相关命令
# ln -s -f /usr/local/jdk1.8.0_201/bin/java /usr/bin/java
# ln -s -f /usr/local/jdk1.8.0_201/bin/javac /usr/bin/javac

# 配置JDK、Maven的环境变量,在配置文件末尾追加以下内容即可
# 注意,在/etc/profile配置文件中添加环境变量后,重启Docker容器后环境变量会失效,建议在DockerFile中添加环境变量,然后通过DockerFile构建得到Docker镜像
# vim /etc/profile

JAVA_HOME=/usr/local/jdk1.8.0_201
JRE_HOME=/usr/local/jdk1.8.0_201/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASSPATH PATH

MAVEN_HOME=/usr/local/apache-maven-3.6.0
PATH=$PATH:$MAVEN_HOME/bin
export MAVEN_HOME PATH

# 使环境变量生效
# source /etc/profile

# 验证环境变量是否生效
# mvn -version
# java -version
# javac -version

# 最后如果上面的配置都生效了,建议执行commit操作生成Docker备份镜像
# docker commit -a "clay@gmail.com" -m "commit jenkins-server image" tomcat8 clay/jenkins-server:1.1

Tomcat 容器内安装 Jenkins

Jenkins 本质是一个 Java 开发的 Web 项目,官方发布方式有 War 文件、Native 包、安装程序、Docker 镜像,Jenkins 官方下载页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 连接容器
# docker exec -it tomcat8 /bin/bash

# 下载War文件到Tomcat的webapps目录
# wget -P /usr/local/tomcat/webapps https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.150.2/jenkins.war

# 编辑server.xml配置文件,修改Tomcat URI地址的编码解码字符集为UTF-8
# vim /usr/local/tomcat/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>

# 断开容器连接
# exit

# 重启容器
# docker restart tomcat8

# 浏览器访问以下地址测试Jenkins是否启动成功,首次访问Jenkins的管理页面,会提示进行解锁操作
http://127.0.0.1:8888/jenkins

# 如果Jenkins启动失败,可以通过输入以下地址查看Jenkins的日志信息或者查看Tomcat的日志信息来定位问题
http://localhost:8888/jenkins/log/all

# 提示:Jenkins默认的数据目录是:/root/.jenkins

解锁 Jenkins

jenkins-install-unlock

1
2
3
4
5
# 连接容器
# docker exec -it tomcat8 /bin/bash

# 查看Jenkins自动生成的管理密码,并将管理密码填写到Jenkins的解锁页面中,这里的管理密码同时也是admin账号的登录密码
# cat /root/.jenkins/secrets/initialAdminPassword

安装 Jenkins 插件

解锁后会跳转到 “自定义 Jenkins” 页面,页面中选择哪种方式来安装插件都不会对后续操作有太大影响;因为有需要的插件可以在后续有针对性地安装,本文选择 “安装推荐的插件”。

jenkins-install-plugin
jenkins-install-plugin2

创建 Jenkins 管理员用户

根据页面提示创建管理员用户,表单填写完后点击”Save and Continue” 按钮保存设置,这里的管理员用户区别于 Jenkins 自动创建的 admin 用户。

jenkins-install-create-admin

配置 Jenkins 实例

一般使用默认的 Jenkins URL 即可。

jenkins-install-instance-config

登录 Jenkins 管理后台

浏览器输入 Jenkins 管理后台的登录地址,填写上面创建的管理员或者 admin 账号和密码即可登录。如果登录后的页面只显示空白页面,可以尝试重启 Tomcat 服务器再访问 URL:http://127.0.0.1:8888/jenkins/login

jenkins-install-login

Jenkins 支持中文界面

Manage Jenkins –> Manage Plugins –> Available –> 搜索关键字”Local” –> 选中 Local 插件进行安装,建议安装完之后手动重启 Tomcat 服务器。

jenkins-local-language
jenkins-local-language2

Jenkins 开启用户注册功能

Manage Jenkins –> Configure Global Security –> 勾选”Allow users to sign up” –> 点击”Save” 按钮保存设置。如果是处于学习或者测试阶段,还可以勾选 “Anyone can do anything”,这样更方便测试 Jenkins 的功能。出于安全考虑,生产环境下记得取消勾选此项。

jenkins-allow-register
jenkins-allow-register2

Jenkins 全局工具配置

Manage Jenkins –> Global Tool Configuration –> 指定 Maven 的配置文件路径、JDK 的安装路径、Maven 的安装路径 –> 点击”Save” 按钮保存设置。不要选择自动安装,因为上面已经手动安装并配置好 Maven、Oracle JDK。
jenkins-global-config
jenkins-global-config2
jenkins-global-config3

安装 deploy to container 插件

jenkins-install-deploy-plugin

到此为止,基于 SVN + Jenkins + Maven + JDK + Docker 的 CI/CD 环境已经搭建完成。

下篇:Jenkins 入门教程之三 Jenkins 与 SVN 持续集成实战