Gitlab+Jenkins实现自动化构建(持续集成)
一、Gitlab配置
gitlab安装部署:https://www.supernb.cn/article/58.html
1、Gitlab一定要有个项目,用于发布代码
2、创建账号的 access token , 用于 Jenkins 调用 GitLab 的 API
创建之后的令牌
二、Jenkins配置
安装配置文章:https://www.supernb.cn/article/60.html
1、Jenkins安装插件:
Git Parameter ( 用于参数化构建中动态获取项目分支 )
Generic Webhook Trigger ( 用于解析 Webhook 传过来的参数 )
GitLab ( 用于推送构建结果给 GitLab )
2、Jenkins设置root用户启动
部分构建会调用系统的一些命令需要用到root权限,建议用root用户启动
jenkins配置文件修改
vim /etc/sysconfig/jenkins
# 将启动用户设置为root
#JENKINS_USER="jenkins"
JENKINS_USER="root"
jenkins启动文件修改
vim /lib/systemd/system/jenkins.service
# 将User、Group修改成root
User=root
Group=root
设置jenkins目录权限
chown -R root:root /var/lib/jenkins
重新启动Jenkins
systemctl stop jenkins
systemctl start jenkins
3、添加Gitlab凭据
填写凭据信息
4、在jenkins设置里连接Gitlab
5、配置GItlab 密钥
在jenkins上生成ssh密钥(ssh-keygen,后面直接回车就可以)
[root@jenkins_test ~]# ssh-keygen
查看root的ssh公钥和jenkins的公钥
[root@jenkins_test ~]# cat /root/.ssh/id_rsa.pub
[root@jenkins_test ~]# cat /var/lib/jenkins/.ssh/id_rsa.pub
添加上面查看的密钥,两个密钥分两次添加哈
6、创建Jenkins项目
在Jenkin首页点击“新建Item”>输入名称>选择“Freestyle project”
7、配置项目
如果提示没有权限,检查一下gitlab添加密钥是否正确
8、获取代码测试
9、通过执行脚本发布代码
本次测试的是发布一个静态文件,不需要构建过程(脚本内容在后面附上)
①/data/script/rsyncCode.sh是发布用的脚本,分发到服务器
②test 是jenkins项目名,也是项目目录(用于脚本找到项目路径)
③192.168.30.131 是目标服务器
④ 22 是目标服务器的ssh端口(jenkins和目标服务器需要做免密哈)
⑤/data/www/wwwroot/test 目标服务器代码存放目录
发布脚本附上(由于富文本编辑器高亮问题,可能部分脚本看不清,复制出来看):
[root@jenkins_test ~]# cat /data/script/rsyncCode.sh
#!/bin/bash
set -x
SRC_FILE="/var/lib/jenkins/workspace/"$1"/" #$1 为 Jenkins任务名称
HOSTS=`echo $2|sed 's/,/ /g'` #项目主机,多个IP使用英文空格隔开,例: 1.1.1.1 或者 1.1.1.1,2.2.2.2
DEPLOY_DST_DIR=$4 # 目标目录
# 指定密钥文件
ssh_key=/root/.ssh/id_rsa
ssh_conf=/etc/ssh/ssh_config
ssh_port=$3
# 变量检查
if [ -z ${SRC_FILE} ]
then
echo "The Jenkins job name must be specified!"
exit 1
fi
if [ -z ${HOSTS} ]
then
echo "The server address must be specified!"
exit 1
fi
if [ -z ${DEPLOY_DST_DIR} ]
then
echo "The destination directory address must be specified!"
exit 1
fi
# 代码同步
for HOST in ${HOSTS}
do
echo “Start updata ${HOST}”
#rsync --progress -raz --no-o --no-g --rsh="ssh -p ${ssh_port} -i $ssh_key -F $ssh_conf" --exclude={'.git','.env','.gitignore','.idea','showdoc.db.php'} ${SRC_FILE} ${HOST}:${DEPLOY_DST_DIR}
#if [ $? -ne 0 ];then exit 1; fi
# 20200818 :Add retry code
for sync_count in $(seq 3)
do
#rsync --timeout=10 --progress -raz --no-o --no-g --rsh="ssh -p ${ssh_port} -i $ssh_key -F $ssh_conf" --exclude={'.git','.env','.gitignore','.idea','showdoc.db.php'} ${SRC_FILE} ${HOST}:${DEPLOY_DST_DIR}
rsync --timeout=10 --progress -raz --no-o --no-g --rsh="ssh -p ${ssh_port} -i $ssh_key -F $ssh_conf" --exclude={'.git','.env','.gitignore','.idea','showdoc.db.php','.DS_Store'} ${SRC_FILE} ${HOST}:${DEPLOY_DST_DIR}
if [ $? -eq 0 ];then
break;
else
syncStatus=${syncStatus}1
fi
if [[ "${syncStatus}" -eq "111" ]];then
echo "run here"
exit 1
fi
done
echo "Sync ${HOST} complete"
echo "modify privileges for web/files"
#ssh -p ${ssh_port} -i $ssh_key -F $ssh_conf ${HOST} "chown -R www.www ${DEPLOY_DST_DIR}";date
#if [ $? -ne 0 ];then exit 1; fi
# 20200818 :Add retry code
for sync_count in $(seq 3)
do
ssh -p ${ssh_port} -i $ssh_key -F $ssh_conf ${HOST} "chown -R www.www ${DEPLOY_DST_DIR}";date
if [ $? -eq 0 ];then
break;
else
syncStatus=${syncStatus}1
fi
if [[ "${syncStatus}" -eq "111" ]];then
echo "run here"
exit 1
fi
done
echo "Deploy finished."
done
三、自动发布代码
当gitlab有代码更新是自动触发jenkins发布代码
1、jenkins
设置“构建触发器”,将webhook URL和Secret tocken复制出来,gitlab里会用到
2、gitlab
设置webhook允许地址连接
评论
登录后才能发表评论 登录/注册
0评论