pipeline 意思是流水线。在多环境的部署中pipeline是有很好的优势,目前集成pipeline的主要有jekins 跟bamboo两个软件。
其中bambaoo是收费的。
这里我们讲解下pipeline的jekins安装
参考下:https://my.oschina.net/ghm7753/blog/371954?p=1
spring boot 开发的程序的pipeline的部署代码如下:
node {
// Mark the code checkout 'stage'....
stage 'Checkout'
git (url: 'git@bitbucket.org:ytx-dev/ytx-cms.git',branch:'develop')
// Get the maven tool.
// ** NOTE: This 'M3' maven tool must be configured
// ** in the global configuration.
def mvnHome = tool 'maven'
// Mark the code build 'stage'....
stage 'Build'
// Run the maven build
sh 'mvn -P production clean package'
stage 'Send'
sh 'sudo ansible cms -m ping'
sh 'sudo ansible cms -m copy -a "src=/home/ubuntu/.jenkins/workspace/ytx-cms/ytx-cms-server/target/ytx-cms-server-1.0.0-SNAPSHOT.jar dest=/tmp"'
sh 'sudo ansible cms -m copy -a "src=/home/ubuntu/.jenkins/workspace/ytx-cms/ytx-cms-web/target/ytx-cms-web-1.0.0-SNAPSHOT.jar dest=/tmp"'
stage 'Deploy'
sh 'curl -X POST http://172.0.19.213:6009/shutdown || true'
sh 'sudo ssh -i /data/id_rsa ubuntu@172.0.19.213 "/home/ubuntu/deploy/ytx-cms-server/appctl.sh redeploy"'
sh 'while ! httping -qc1 http://172.0.19.213:6009/health ; do sleep 1 ; done'
sh 'curl -i http://172.0.19.213:6009/health '
}
其中appctl.sh 的脚本如下:
#!/usr/bin/env bash
APP_NAME="ytx-cms-server-1.0.0-SNAPSHOT.jar"
APP_PORT="6009"
MANAGEMENT_PORT="6009"
DATE=`date -d today +"%Y-%m-%d_%H"`
APP_PATH="/home/ubuntu/deploy/ytx-cms-server"
function stop_app() {
kill -9 `lsof -t -i:${APP_PORT}`
}
function start_app() {
/home/ubuntu/.jenv/candidates/java/current/bin/java -jar ${APP_PATH}/${APP_NAME} >${APP_PATH}/pipeline.log &
}
function health_check() {
http http://localhost:${MANAGEMENT_PORT}/health
}
case $1 in
start)
echo -e "\033[31m Start the Application \033[0m"
${APP_PATH}/${APP_NAME} &
;;
redeploy)
echo -e "\033[31m Stop the Application \033[0m"
stop_app
echo -e "\033[31m Backup application file \033[0m"
mkdir -p ${APP_PATH}/backup
mv ${APP_PATH}/${APP_NAME} ${APP_PATH}/backup/${APP_NAME}_${DATE}
echo -e "\033[31m Copy application file from /tmp \033[0m"
cp /tmp/${APP_NAME} /${APP_PATH}
echo -e "\033[31m Start the Application at port: ${APP_PORT} \033[0m"
start_app
;;
health)
echo -e "\033[31m Begin to health check \033[0m"
health_check
;;
metrics)
echo -e "\033[31m Check application metrics \033[0m"
http http://localhost:${MANAGEMENT_PORT}/metrics
;;
*)
echo -e "\033[31m Unkown command, please use start, stop, redeploy, health or metrics \033[0m"
;;
esac
其中注意事项:
1、java 远程执行的时候需要指定java的路径
2、spring boot jar包执行的时候不能停下来,所以必须后台执行
3、实时监控运行的状态
sh 'while ! httping -qc1 http://172.0.19.213:6009/health ; do sleep 1 ; done'
如果运行成功那么停止下来
4、输出运行的
sh 'curl -i http://172.0.19.213:6009/health '
还未完成 ansible 需要循环输出每个服务器的信息,每个服务器逐步部署