jenkins集成gitlab
安装插件
安装后重新jenkins才会生效。
插件名称 | 插件作用 |
---|---|
Authentication Tokens API | 允许在Jenkins中存储认证的凭据 |
Git Client Plugin | 允许Jenkins使用Git |
Git Plugin | 允许Jenkins集成Git |
Gitlab Plugin | 允许Gitlab触发Jenkins构建并在Gitlab中显示 |
Gitlab Authentication plugin | 允许在Jenkins中存储认证的凭据 |
Authentication Tokens API | gitlab 身份验证插件 |
安装git客户端
jenkins所在的服务器需要安装git客户端,否则jenkins配置拉取代码报错。
-
安装git
yum -y install git
-
查看版本
git --version
创建一个freestyle项目
-
点击新建item,如图:
-
填写项目信息
填写项目名称,选择freestyle project,点击确定,如图:
-
填写项目基本信息,并设置副本数
-
设置git
我使用的是ssh方式,也可以使用账号密码的方式,都行。
-
在jenkins所在服务器上生成秘钥。
ssh-keygen
一路回车后,查看私钥,如图:
cat ~/.ssh/id_rsa
-
将生成的秘钥填入
-
将公钥配置到gitlab的root账户下
cat ~/.ssh/id_rsa.pub
使用root登录gitlab,将公钥填入
-
选择配置好的秘钥,点击应用。
-
点击构建,构建完成后点击工作空间,如果代码存在则配置成功!
点击工作空间之后右侧出现gitlab的代码,证明拉取成功!
部署html项目
我这里先部署一个html项目作为jenkins入门,熟悉jenkins的工作过程,后续再部署springboot项目和前端vue项目,我的ywxd-portal项目中只有一个html页面和一张图片。
-
进入项目配置中,将要触发的脚本放入构建步骤中。
sh -x /home/jenkins_script/ywxd-portal.sh
-
编写脚本
我的jenkins脚本都放在/home/jenkins_script 目录下,我的脚本名为:ywxd-portal.sh
#!/usr/bin/bash
DATE=$(date +%Y-%m-%d-%H-%S)
web_server="10.0.10.11"
jenkins_tmp=/home/jenkins_tmp
target_base=/home/java-project/ywxd-portal
# 1.进入项目目录,将项目内容进行打包
get_code(){
cd ${WORKSPACE} && \
tar czf ${jenkins_tmp}/ywxd-portal-${DATE}.tar.gz ./*
}
# 2.将内容通过scp拷贝至web集群组
scp_web_server(){
for hosts in ${web_server}
do
scp ${jenkins_tmp}/ywxd-portal-${DATE}.tar.gz root@${hosts}:${target_base}/tmp
ssh root@${hosts} "mkdir -p ${target_base}/code/web-${DATE} && \
tar xf ${target_base}/tmp/ywxd-portal-${DATE}.tar.gz -C ${target_base}/code/web-${DATE}
rm -rf ${target_base}/web && \
ln -s ${target_base}/code/web-${DATE} ${target_base}/web"
done
}
deploy(){
get_code
scp_web_server
}
deploy
-
脚本中的文件夹我会事先创建好
mkdir -r /home/jenkins_tmp
目标服务器中
mkdir -r /home/java-project/ywxd-portal/tmp
-
构建项目
根据脚本执行,会将html代码拷贝到我的11服务器上,然后通过nginx映射,在浏览器就可以访问了,后续再修改直接构建就可完成部署。
回滚
-
安装插件Git Parameter
-
配置参数化构建,安装图中设置
-
添加选项参数,部署或者回滚
-
指定拉取的tag为选择的版本,点击应用
-
修改脚本
#!/usr/bin/bash
DATE=$(date +%Y-%m-%d-%H-%S)
web_server="10.0.10.11"
jenkins_tmp=/home/jenkins_tmp
target_base=/home/java-project/ywxd-portal
NAME=${DATE}-${git_version}
# 1.进入项目目录,将项目内容进行打包
get_code(){
cd ${WORKSPACE} && \
tar czf ${jenkins_tmp}/ywxd-portal-${NAME}.tar.gz ./*
}
# 2.将内容通过scp拷贝至web集群组
scp_web_server(){
for hosts in ${web_server}
do
scp ${jenkins_tmp}/ywxd-portal-${NAME}.tar.gz root@${hosts}:${target_base}/tmp
ssh root@${hosts} "mkdir -p ${target_base}/code/web-${NAME} && \
tar xf ${target_base}/tmp/ywxd-portal-${NAME}.tar.gz -C ${target_base}/code/web-${NAME}
rm -rf ${target_base}/web && \
ln -s ${target_base}/code/web-${NAME} ${target_base}/web"
done
}
deploy(){
get_code
scp_web_server
}
rollback(){
for hosts in ${web_server}
do
back_file=$(ssh root@${hosts} "find ${target_base}/code/ -maxdepth 1 -type d -name "web-\*-${git_version}"")
ssh root@${hosts} "rm -rf ${target_base}/web && \
ln -s ${back_file} ${target_base}/web"
done
}
if [ $deploy_env == "deploy" ];then
if [ ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ];then
echo "你已经部署过该${git_version}版本"
exit 1
else
deploy
fi
elif [ $deploy_env == "rollback" ];then
rollback
fi
- 验证
点击构建,如果构过的,会报错,提示部署过改版本,点击回滚,则会将软连接链接到上一版本的code上。这样简单的html项目就完成了自动化部署