3.2 流水线
1.选择Pipeline script
2.本项目演示环境的pipeline脚本
下面的脚本仅供参考
是建立在目标服务器和git都已经做了免密登录的环境下
pipeline { agent any environment { REPOSITORY="https://gitee.com/zlt2000/microservices-platform.git" t_dir="/opt/application/microservices-platform" t_ssh="root@120.78.94.191" api_url="120.78.94.191:9900" sonar_url="120.78.94.191:9000" } stages { stage('获取代码') { steps { echo "start fetch code from git:${REPOSITORY}" deleteDir() git "${REPOSITORY}" } } stage('代码静态检查') { steps { echo "start code check" sh "mvn clean compile sonar:sonar -Dsonar.host.url=http://${sonar_url}" } } stage('单元测试') { steps { echo "start test" sh "mvn test" junit '**/target/surefire-reports/TEST-*.xml' } } stage('打包') { steps { echo "start package" sh "sed -i 's/127.0.0.1:9900/${api_url}/g' zlt-web/back-web/src/main/resources/static/module/apiUrl.js" sh "mvn package -Dmaven.test.skip=true" } } stage('部署') { steps { echo "start deploy" sh "ssh ${t_ssh} rm -f ${t_dir}/*.jar" script { def apps = ['zlt-business/*', 'zlt-gateway/zuul-gateway' , 'zlt-job/job-admin', 'zlt-job/job-executor-samples' , 'zlt-monitor/*', 'zlt-uaa', 'zlt-web/*'] for (int i = 0; i < apps.size(); ++i) { sh "scp ${apps[i]}/target/*.jar ${t_ssh}:${t_dir}" } } } } stage('重启') { steps { echo "start restart" script { def apps = ['zlt-uaa', 'user-center', 'file-center', 'zuul-gateway' , 'log-center', 'code-generator' , 'job-admin', 'job-executor-samples'] for (int i = 0; i < apps.size(); ++i) { sh "ssh ${t_ssh} 'cd ${t_dir};sh shutdown.sh ${apps[i]}'" if ("${apps[i]}" == 'sc-admin') { sleep 60 } else { sleep 30 } sh "ssh ${t_ssh} 'cd ${t_dir};sh start.sh ${apps[i]}'" } } } } } post { always { echo '构建结束...' } success { echo '恭喜您,构建成功!!!' } failure { echo '抱歉,构建失败!!!' } unstable { echo '该任务已经被标记为不稳定任务....' } changed { echo '' } } }
3.目标服务器的shutdown.sh内容
pid=`ps ax | grep -i $1 |grep java | grep -v grep | awk '{print $1}'` if [ -z "$pid" ] ; then echo "No $1 running." fi echo "The $1(${pid}) is running..." kill ${pid} echo "Send shutdown request to $1(${pid}) OK"
4.目标服务器的start.sh内容
nohup java -Dspring.profiles.active=test -Dzlt.nacos.server-addr=120.78.94.191:8848 -jar -Xmx256M -Xms256M $1.jar >> /dev/null 2>&1 &
4. 流水线简单例子
在构建的时候通过参数控制构建行为
4.1 新建任务
新建任务 -> 流水线
General:勾选参数化构建过程,添加参数:
4.2 构建触发器
如果需要通过git触发构建的话需要勾选触发远程构建和填写身份验证令牌
详细的git触发配置请看 webhook配置
4.3 流水线
1.选择Pipeline script
2.本项目演示环境的pipeline脚本
下面的脚本仅供参考
是建立在目标服务器和git都已经做了免密登录的环境下
脚本里的参数service_names
和project_version
就是通过构建时传进去的:
pipeline { agent any environment { git_addr="https://gitee.com/zlt2000/microservices-platform.git" target_dir="/opt/application/microservices-platform" target_ssh="root@120.78.94.191" api_url="120.78.94.191:9900" sonar_url="192.168.28.134:9000" backup_dir="/opt/app/backup" } stages { stage('获取代码') { steps { echo "start fetch code from git:${git_addr}" deleteDir() git "${git_addr}" } } stage('代码静态检查') { when { environment name:'is_test', value:'是' } steps { echo "start code check" sh "mvn clean compile sonar:sonar -Dsonar.host.url=http://${sonar_url}" } } stage('单元测试') { when { environment name:'is_test', value:'是' } steps { echo "start test" sh "mvn test" junit '**/target/surefire-reports/TEST-*.xml' } } stage('打包') { steps { echo "start package" sh "sed -i 's/127.0.0.1:9900/${api_url}/g' zlt-web/back-web/src/main/resources/static/module/apiUrl.js" sh "mvn package -Dmaven.test.skip=true" } } stage('部署') { steps { echo "start deploy" sh ''' if [ ! -d "${backup_dir}/${project_version}" ];then mkdir -p ${backup_dir}/${project_version} fi ''' script { def apps = "${service_names}".split(",") for (int i = 0; i < apps.size(); ++i) { if ("${apps[i]}" == 'zlt-uaa') { service_path = '' } else { service_path = '*/' } sh "rm -f ${backup_dir}/${project_version}/${apps[i]}.jar" sh "cp "+service_path+"${apps[i]}/target/*.jar ${backup_dir}/${project_version}/" sh "ssh ${target_ssh} rm -f ${target_dir}/${apps[i]}.jar" sh "scp "+service_path+"${apps[i]}/target/*.jar ${target_ssh}:${target_dir}" } } } } stage('重启') { steps { echo "start restart" script { def apps = "${service_names}".split(",") for (int i = 0; i < apps.size(); ++i) { sh "ssh ${target_ssh} 'cd ${target_dir};sh shutdown.sh ${apps[i]}'" if ("${apps[i]}" == 'sc-admin') { sleep 60 } else { sleep 30 } sh "ssh ${target_ssh} 'cd ${target_dir};sh start.sh ${apps[i]}'" } } } } } post { always { echo '构建结束...' } success { echo '恭喜您,构建成功!!!' } failure { echo '抱歉,构建失败!!!' } unstable { echo '该任务已经被标记为不稳定任务....' } changed { echo '' } } }
3.目标服务器的shutdown.sh内容
pid=`ps ax | grep -i $1 |grep java | grep -v grep | awk '{print $1}'` if [ -z "$pid" ] ; then echo "No $1 running." fi echo "The $1(${pid}) is running..." kill ${pid} echo "Send shutdown request to $1(${pid}) OK"
4.目标服务器的start.sh内容:
nohup java -Dspring.profiles.active=test -Dzlt.nacos.server-addr=120.78.94.191:8848 -jar -Xmx256M