Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作 。
==安装Jenkins需要2G以上内存==
一、Jenkins安装方法
1、下载软件包及插件
https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
2、安装JDK和Jenkins
cd /opt
rpm -ivh jdk-8u181-linux-x64.rpm
rpm -ivh jenkins-2.190.1-1.1.noarch.rpm
3、修改配置文件
vim /etc/sysconfig/jenkins
JENKINS_USER="root" #将启动用户改为root
4、启动服务
systemctl start jenkins
systemctl enable jenkins
5、进入网页进行配置
http://xxx.xxx.xxx.xxx:8080 #jenkins主机ip地址
==要先修改管理员登录密码!!==
6、安装插件
(1)、通过清华源在线安装
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
(2)、使用软件包离线安装
tar xf jenkins_plugins.tar.gz -C /var/lib/jenkins/
ll /var/lib/jenkins/plugins #查看插件目录是否有文件
systemctl restart jenkins #重启服务
二、Jenkins自动发布代码
1、在Jenkins主机上生成密钥对,复制公钥信息
ssh-keygen -t dsa
cat /root/.ssh/id_dsa.pub
2、进入gitlab页面配置jenkins公钥信息
3、在Jenkins主机上复制私钥信息
cat /root/.ssh/id_dsa
4、Jenkins网页上创建一个新任务
5、设置任务源码管理
6、设置任务构建触发器
7、在gitlab项目中设置网钩
8、设置任务构建,执行脚本命令
9、在Jenkins主机上编写脚本
第一种:
mkdir -p /server/scripts
vim /server/scripts/jenkins.sh
#!/bin/sh
CODE_DIR="/html/$(date +%F_%H:%M)_code"
IP="172.16.1.7"
#打包代码文件
cd ${WORKSPACE}/
tar zcf /tmp/${JOB_NAME}.tar.gz ./* --exclude=.git
#发送代码文件到web主机
ssh $IP "mkdir -p ${CODE_DIR}"
scp /tmp/${JOB_NAME}.tar.gz ${IP}:${CODE_DIR}
#远程解压代码
ssh $IP "cd ${CODE_DIR} && tar xf ${JOB_NAME}.tar.gz "
#删除压缩包及旧软链接
ssh $IP "rm -rf ${CODE_DIR}/${JOB_NAME}.tar.gz && rm -rf /html/www"
#创建新的软链接
ssh $IP "cd /html && ln -s $(date +%F_%H:%M)_code www"
chmod +x /server/scripts/jenkins.sh
分发公钥到web主机
ssh-copy-id -i 172.16.1.7
修改web主机上的Nginx配置文件
vim /etc/nginx/conf.d/www.conf
server {
listen 80;
server_name localhost;
location / {
root /html/www;
index index.html;
}
}
systemctl restart nginx
10、测试是否成功
三、将Jenkins构建结果返回给GitLab
1、gitlab生成访问令牌
2、Jenkins添加访问令牌
3、设置任务构建后操作
4、测试是否成功
四、自动回滚代码
1、gitlab上给仓库打标签
2、在Jenkins任务添加标签选择参数
3、将分支说明改成标签名称变量
4、添加选项参数
5、修改Jenkins主机脚本
vim /server/scripts/jenkins.sh
#!/bin/bash
CODEDIR=/html
IP=172.16.1.7
TAR_CODE(){
cd ${WORKSPACE}
tar zcf /opt/${git_version}.tar.gz ./* --exclude=.git
}
SCP_CODE(){
ssh ${IP} "mkdir ${CODEDIR}/${git_version} -p"
scp /opt/${git_version}.tar.gz ${IP}:${CODEDIR}/${git_version}
}
XF(){
ssh ${IP} "cd ${CODEDIR}/${git_version} && tar xf ${git_version}.tar.gz && rm -rf ${git_version}.tar.gz"
}
CREATE_LN(){
ssh ${IP} "cd ${CODEDIR} && rm -rf www && ln -s ${git_version} www"
}
main(){
if [[ "${choice}" == "publish" ]];then
if [[ "$GIT_COMMIT" == "GIT_PREVIOUS_SUCCESSFUL_COMMIT" ]];then
echo "构建失败,该版本已发布"
else
TAR_CODE
SCP_CODE
XF
CREATE_LN
fi
else
CREATE_LN
fi
}
main