在上一篇文章的基础设置上进行
1. 机器准备
|---------|------------|
| 开发 | 10.0.0.204 |
| gitlab | 10.0.0.201 |
| jenkins | 10.0.0.200 |
| web | 10.0.0.202 |
2. 开发主机
在开发机器上修改不同版本的前端页面,并打上标签
第一次修改
root@dev wheel#vim index.html
root@dev wheel#git commit -am "1.0"
master 6914b4e 1.0
1 file changed, 1 insertion(+), 1 deletion(-)
root@dev wheel#git tag v1.0
root@dev wheel#git push --all
第二次修改root@dev wheel#vim index.html
root@dev wheel#git commit -am "2.0"
master 6914b4e 2.0
1 file changed, 1 insertion(+), 1 deletion(-)
root@dev wheel#git tag v2.0
root@dev wheel#git push --all
第三次修改root@dev wheel#vim index.html
root@dev wheel#git commit -am "3.0"
master 6914b4e 3.0
1 file changed, 1 insertion(+), 1 deletion(-)
root@dev wheel#git tag v3.0
root@dev wheel#git push --all
上传所有标签root@dev wheel#git push --tags
总共 0(差异 0),复用 0(差异 0),包复用 0
To gitlab.lly.org:devops/wheel.git
* new tag v1.0 -> v1.0
* new tag v2.0 -> v2.0
* new tag v3.0 -> v3.0
3. jenkins 机器
项目发布和回滚一体的脚本
root@jenkins scripts#vim wheel-gitlab-deploy-rollback.sh
HOST_LIST="
10.0.0.202"
APP=wheel
VERSION=`date +%F_%s`
DATA_PATH=/srv
#DATA_PATH=/srv/{APP}-{VERSION}
APP_PATH=/var/www/html
deploy(){
for host in $HOST_LIST;do
ssh root@host "mkdir -p DATA_PATH/{APP}-{VERSION} && rm -rf ${APP_PATH}"
scp -r * root@host:DATA_PATH/{APP}-{VERSION}
ssh root@host ln -s DATA_PATH/{APP}-{VERSION} ${APP_PATH}
done
}
rollback() {
for i in ${HOST_LIST};do
CURRENT_VERISION=(ssh root@i "readlink $APP_PATH")
CURRENT_VERISION=(basename {CURRENT_VERISION})
echo ${CURRENT_VERISION}
PRE_VERSION=(ssh root@i "ls -1 {DATA_PATH} \| grep -B1 {CURRENT_VERISION}|head -n1 ")
echo $PRE_VERSION
ssh root@i "rm -f {APP_PATH}&& ln -sv {DATA_PATH}/{PRE_VERSION} ${APP_PATH}"
done
}
case $1 in
deploy)
deploy
;;
rollback)
rollback
;;
*)
echo "Usage: $0 deploy|rollback"
;;
esac
4. jenkins 工具
jenkins 工具上添加任务(提前下载 git parameter 插件)
根据脚本中的两个函数填写选项参数,并设为变量
选择 git 参数,自动生成标签
源码管理中,URL 和凭证对应选择(若是 http,则使用用户名密码认证凭证,若是 git,则使用key认证凭证)
构建步骤选择 excute shell ,填写脚本绝对路径,后面跟上参数变量,运行时可指定函数
执行任务时,则可选择指定发布或是回滚,以及可指定版本
5. web 端验证
使用web 主机 ip 验证前端页面是否按照指定的版本显示




