持续集成的好处
Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。官网:Jenkins 官网。
Jenkins的特征
开源的Java语言开发持续集成工具,支持持续集成,持续部署。
易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。
消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。
分布式构建:支持Jenkins能够让多台计算机一起构建/测试。
文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。
Jenkins 自动化部署实现原理
1. 创建 Jenkins 挂载目录并授予权限
//创建目录
mkdir -p /usr/local/docker/jenkins_home
//授权权限
chmod 777 /usr/local/docker/jenkins_home
2. 安装Maven
因为用到的docker镜像中不包含maven,所以要在宿主机中安装,通过文件挂载的方式提供调用
从官网下载maven,并放到宿主机/opt
目录下
# 切换到要安装的文件夹
cd /opt
# 解压
tar -xzvf apache-maven-3.8.5-bin.tar.gz
# 配置 apache-maven-3.8.5/conf/settings.xml,添加阿里云maven镜像仓库
vim apache-maven-3.8.5/conf/settings.xml
# 在标签中添加以下配置
aliyunmaven
*
阿里云公共仓库
https://maven.aliyun.com/repository/public
# 添加环境变量
vi /etc/profile
# 在文件底部加上
export M2_HOME=/opt/apache-maven-3.8.5
export PATH=$PATH:${M2_HOME}/bin
# 保存并退出编辑,使用下面的命令让修改生效
source /etc/profile
# 验证Maven安装
mvn -version
2. 启动 Jenkins 容器
# 最好先去dockerhub上找到最新版本,拉取指定版本号,否则容易出现插件安装失败的问题
docker run -d -p 8081:8080 -p 50000:50000 --restart=always \
-v /usr/local/docker/jenkins_home:/var/jenkins_home \
-v /etc/localtime:/etc/localtime -v /opt/apache-maven-3.8.5:/usr/local/maven \
-e PHP_TZ="Asia/Shanghai" --name jenkins jenkins/jenkins:2.341-jdk8
3. 打开浏览器访问
http://192.168.159.100:8081
4. 获取并输入admin账户密码
vim /usr/local/docker/jenkins_home/secrets/initialAdminPassword
# 如果jenkins版本太老,可以在不影响jenkins项目的情况下,更新jenkins版本
# 1.以root用户进入jenkins容器
docker exec -it -u root jenkins /bin/bash
# 2.在容器中下载jenkins的最新war包,],如果嫌下载太慢也可以从官网(https://www.jenkins.io/download/)下载war包然后拷贝到挂载目录中
wget http://mirrors.jenkins.io/war/latest/jenkins.war
# 3.查看容器中jenkins war包的位置,并备份原来的war包
whereis jenkins
cd /usr/share/jenkins
cp jenkins.war jenkinsBAK.war
# 4.将/var/jenkins_home的包cp到/usr/share/jenkins下覆盖
cp /var/jenkins_home/jenkins.war /usr/share/jenkins/
# 5.退出容器并重启
exit
docker restart jenkins
1. 跳过插件安装
因为Jenkins插件需要连接默认官网下载,速度非常慢,而且经过会失败,所以我们暂时先跳过插件安装。
3. 修改 Jenkins 插件下载源
Jenkins->Manage Jenkins->Manage Plugins,点击Available,这样做是为了把Jenkins官方的插件列表下载到本地。
修改地址文件,替换为国内插件地址。
# docker 安装,因为做了映射,直接在宿主机挂载的jenkins_home中修改
cd /usr/local/docker/jenkins_home/updates
# 换成清华镜像库
# 使用docker安装的jenkins,如没有“default.json”文件,则访问“http://localhost:8081/restart”后再执行以下步骤
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
重启 Jenkins
访问 http://192.168.159.100:8081/restart
,地址为部署的地址后加/restart
修改 Update Site
在Manage Plugins点击Advanced,把Update Site改为国内插件下载地址:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
重启 Jenkins
访问 http://192.168.159.100:8081/restart
,地址为部署的地址后加/restart
4. 下载中文汉化插件
1. 安装Role-based Authorization Strategy插件
2. 授权策略切换为"Role-Based Strategy"
3. 创建角色
系统管理 -> Manage and Assign Roles -> Manage Roles
Global roles(全局角色):管理员等高级用户可以创建基于全局的角色
Project roles(项目角色):针对某个或者某些项目的角色,最新版已改名为“Item roles”
Slave roles(奴隶角色):节点相关的权限,最新版已改名为“Node roles”
4. 创建用户
系统管理 -> Manage Users -> 新建用户
5. 给用户分配角色
系统管理 -> Manage and Assign Roles -> Assign Roles
在 User/group to add
中输入需要分配角色的用户,勾选相应角色,保存。
凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互
安装插件后,在安全菜单会显示凭证管理选项,在这里管理所有凭证。
可以添加的凭证有5种:
Username with password:用户名和密码
SSH Username with private key: 使用SSH用户和密钥
Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的Secret file就会被删除。
Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
Certificate:通过上传证书文件的方式
为了让Jenkins支持从Gitlab拉取源码,需要安装Git插件以及在jenkins服务器上安装Git工具。
# 使用linux安装jenkins,需要jenkins所在的服务器安装git,docker 版的容器已经安装,所以不需要再安装
yum install git -y
1.添加凭据
Manage Credentials -> Jenkins -> 全局凭据 -> 添加凭据,填入git仓库的账号和密码即可
回到主页,新建任务 -> 构建一个自由风格的的软件项目(FreeStyle Project)-> 输入任务名称 -> 确定
在源码管理中选择Git
,填入仓库的http连接,并选择刚才添加的凭据,点击保存。
选择立即构建(Build Now)。
点击控制台输出,可以看到项目保存位置。
1. 生成SSH密钥
# 使用docker部署的需使用“docker exec -it jenkins bin/bash”命令进入容器内生成密钥
# 输入以下命令后,连着按三次回车键,生成秘钥
ssh-keygen -t rsa
# 获取公钥
cat ~/.ssh/id_rsa.pub
2. 将SSH公钥添加到远程仓库中
3. 在Jenkins中添加凭据,配置私钥
在凭据中选择SSH Username with private key
,填写用户名和私钥。
# 获取私钥
cat ~/.ssh/id_rsa
回到主页,新建任务 -> 构建一个自由风格的的软件项目(FreeStyle Project)-> 输入任务名称 -> 确定
在源码管理中选择Git
,填入仓库的ssh连接,并选择刚才添加的凭据,点击保存。
选择立即构建(Build Now)。
点击控制台输出,可以看到项目保存位置。
1. 全局工具配置关联JDK、Git和Maven
docker版自带jdk和git,可进入容器通过以下命令获取jdk和git路径,使用linux安装需提前安装好git和jdk
# 进入jenkins容器
docker exec -it jenkins /bin/bash
# 查看jdk版本
java -version
# 查看jdk路径
which java
# 查看git版本
git --version
# 查看git路径
which git
此处不建议直接使用自动安装maven,自动安装的maven会在首次使用maven构建项目时才下载下来,加上使用国外镜像仓库,会导致构建项目时间过长。
2.安装Maven Integration
插件
3. 配置环境变量
配置完全局配置后去配置 jenkins 的环境变量 不然jenkins 运行打包命令会找不到 JAVA_HOME 和mvn 命令(yum安装jenkins需要配置环境变量,war包安装方式不用配置,docker 安装的jenkins属于用war包安装的,所以可以不用配置)
Manage Jenkins->Configure System->Global Properties ,添加三个全局变量:JAVA_HOME、M2_HOME、PATH+EXTRA
4. 修改maven仓库地址,方便查看
docker 挂载的maven默认仓库地址为jenkins挂载目录中~/jenkins_home/.m2/repository
下,如果不在意的话可以不改
# 创建本地仓库目录,docker安装的需要进入容器内部创建
mkdir /root/repo
# 进入配置文件
vi /opt/maven/conf/settings.xml
# 修改中的内容
/root/repo
5. 测试Maven是否配置成功
填入clean package
,保存后进行构建,如果可以编译打包成功,则说明Maven配置成功。
# 首先启动一个tomcat容器,记得提前打开8080端口或关闭防火前
docker run -d -p 8080:8080 --name=tomcat tomcat:9.0
# 拷贝配置文件到宿主机
docker cp tomcat:/usr/local/tomcat /usr/local/docker/
# 可以修改tomcat配置文件(server.xml),自定义端口等
# 将webapps.dist中的文件复制到webapps目录下
cp /usr/local/docker/tomcat/webapps.dist/ /usr/local/docker/tomcat/webapps/
# 删除之前创建的tomcat
docker rm -f tomcat
# 启动正式tomcat
docker run --restart=always --name=tomcat -p 8080:8080 \
-v /usr/local/docker/tomcat:/usr/local/tomcat \
-d tomcat:9.0
在浏览器的地址栏输入:
http://192.168.159.100:8080/(服务器的ip和tomcat默认端口8080)
1. 配置Tomcat用户角色权限
默认情况下Tomcat是没有配置用户角色权限的,后续Jenkins部署项目到Tomcat服务器,需要用到Tomcat的用户,所以修改tomcat以下配置,添加用户及权限。
# 修改tomcat配置文件,允许jenkins访问
vi /usr/local/docker/tomcat/conf/tomcat-users.xml
# 添加以下配置,管理员密码为:tomcat/tomcat
# 为了能够刚才配置的用户登录到Tomcat,让所以ip都可以访问tomcat,还需要修改以下配置
vi /usr/local/docker/tomcat/webapps/manager/META-INF/context.xml
# 注释这段配置
# 重启Tomcat
docker restart tomcat
1. 安装Deploy to container插件
Jenkins本身无法实现远程部署到Tomcat的功能,需要安装Deploy to container插件实现。
2. 添加构建后操作
在刚才的maven项目配置中增加构建后操作步骤,应用并保存,构建成功后访问项目地址:格式为http://ip:port/context_path