jenkins实现集群代码自动发布

general

Git Parameter: git_version, Parameter Type选择tag
选项参数:deploy_env, deploy rollback

mvn package -Dmaven.test.skip=true #跳过测试用例

发布nginx静态网站

  • 创建 自由风格软件项目
  • 详细配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1. 丢弃旧的构建
策略 Log Rotation ;保障构建的最大个数 15 ;(根据情况来,这个和保持构建的天数二选一)

2. 参数化构建
先安装插件,git parameter
参数化构建过程,名称(git_version)、描述(选择部署tag版本)、参数类型(标签)、默认值(origin/master)



3. 源码管理
Repositories:添加代码仓库,认证可使用密码或密钥
Branches to build:指定分支,设置为:${git_version} ,和上面对应取值

4. 构建
执行shell
sh -x /data/scripts/deploy-nginx.yaml
  • 设置git提交代码免密
1
2
3
4
5
6
git config --global credential.helper store
# 这一步会在用户目录下的.gitconfig文件最后添加:
[credential]
helper = store

后面再提交代码时会记录密码
  • git提交代码打标签
    1
    2
    3
    4
    5
    6
    git add .
    git commit -m "xx"
    git push origin master
    git tag # 查看当前标签
    git tag -a "v1.1" -m "xx"
    git push origin v1.1

发布动态网站tomcat

  • 创建任务
    1
    选择构建一个maven项目,如果没此选项,请先安装插件Maven Integration  或者 Pipeline Maven Integration

mark

  • 参数化构建
    1
    2
    git paramter: 名称 git_version、标签 默认值:origin/master
    选项参数:deploy_env、deploy rollback

mark

  • 源码管理
    1
    2
    Repositories: 添加对应仓库地址
    Branches to build:指定分支,${git_version} 与上面参数化对应

mark

  • 配置build

    1
    2
    Root POM: pom.xml
    Goals and options: package -Dmaven.test.skip=true #跳过测试用例
  • Post Steps

    1
    选择执行shell

mark


jenkins发布shell脚本

普通静态网站发布
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/bash
DATE=$(date +%Y-%m-%d-%H-%M-%S)
WebServer="192.168.100.2 192.168.100.3"
SDir=/data/web/
DDir=/usr/share/nginx/html
Name=${DATE}-${git_version}
Dir=/usr/share/nginx

# 进入项目目录,将内容进行打包
get_code() {
# $WORKSPACE 取值jenkins默认变量的项目文件目录
cd ${WORKSPACE} && tar czf ${SDir}nginx-${Name}.tar.gz ./*
}

# 将内容通过scp拷贝至web集群
scp_webserver() {
for hosts in $WebServer
do
scp ${SDir}nginx-${Name}.tar.gz root@${hosts}:${SDir}
ssh root@${hosts} "mkdir -p ${DDir}-${Name} && \
tar xf ${SDir}nginx-${Name}.tar.gz -C ${DDir}-${Name}
rm -rf ${DDir} && \
ln -s ${DDir}-${Name} ${DDir}"
done
}

# 部署
deploy() {
get_code
scp_webserver
}

# 回滚
roll_back() {
for hosts in $WebServer
do
back_file=$(ssh root@${hosts} "find ${Dir} -maxdepth 1 -type d -name html-*-${git_version}")
ssh root@${hosts} "rm -rf ${DDir} && \
ln -s ${back_file} ${DDir}"
done
}

# 判断之前是否部署过该版本的commit
if [ ${deploy_env} == "deploy" ];then
echo ${deploy_env}
if [ ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ];then
echo "已部署过该版本 ${git_version} 版本"
exit 1
else
deploy
fi
elif [ ${deploy_env} == "rollback" ];then
echo "开始回滚..."
roll_back
fi
tomcat发布war包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/bin/bash
DATE=$(date +%Y-%m-%d-%H-%M-%S)
WebServer="192.168.100.2 192.168.100.3"
SDir=/data/web
DDir=/data/apache-tomcat-9/webapps
Name=${DATE}-${git_version}
Dir=/data/apache-tomcat-9/bin

# 进入项目目录,将内容进行打包
get_code() {
# $WORKSPACE 取值jenkins默认变量的项目文件目录
cd ${WORKSPACE}
}

# 将内容通过scp拷贝至web集群
scp_webserver() {
for hosts in $WebServer
do
scp target/*.war root@${hosts}:${SDir}/ROOT-${Name}.war
ssh root@${hosts} "mkdir -p ${DDir}/ROOT-${Name} && \
unzip ${SDir}/ROOT-${Name}.war -d ${DDir}/ROOT-${Name} && \
rm -rf ${DDir}/ROOT && \
ln -s ${DDir}/ROOT-${Name} ${DDir}/ROOT && \
${Dir}/shutdown.sh && sleep 2 && ${Dir}/startup.sh"
done
}

# 部署
deploy() {
get_code
scp_webserver
}

# 回滚
roll_back() {
for hosts in $WebServer
do
back_file=$(ssh root@${hosts} "find ${DDir} -maxdepth 1 -type d -name ROOT-*-${git_version}")
ssh root@${hosts} "rm -rf ${DDir}/ROOT && \
ln -s ${back_file} ${DDir}/ROOT && \
${Dir}/shutdown.sh && sleep 2 && ${Dir}/startup.sh"
done
}

# 判断之前是否部署过该版本的commit
if [ ${deploy_env} == "deploy" ];then
echo ${deploy_env}
if [ ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ];then
echo "已部署过该版本 ${git_version} 版本"
exit 1
else
deploy
fi
elif [ ${deploy_env} == "rollback" ];then
echo "开始回滚..."
roll_back
fi
-------------本文结束感谢您的阅读-------------
原创技术分享,感谢您的支持。