介绍
coding持续集成,我这里就不多做介绍
相关文档请查看coding持续集成
构建计划分成基础信息,流程配置,触发规则,变量与缓存和通知提醒
新建构建计划
支持各种代码源coding,github,gitlab,码云等等,coding已经给你做好简易jenkinsfile模板,可以直接使用,进行构建计划
流程配置
这里比较方便,支持图形化编辑和文本编辑,使人一目了然。图形化显示从开始->检出代码->构建->测试->部署整个流程
-
检出代码
默认会有检出scm代码,只需要配置环境变量即可,也可以通过coding系统默认变量使用,请查看官方文档说明,代码地址,分支,密钥等等都可以查看到,也可以单独配置环境变量
GIT_BUILD_REF----分支
GIT_REPO_URL----git地址
CREDENTIALS_ID----部署私钥凭据 CredentialsId 用于拉取仓库(这里需要特殊说明下,需要在项目设置->开发者选项->凭据管理,进行配置凭据)
配置完成后,就可以下拉代码,存在coding默认得/root/workspace/ 目录下。这里我也没有找到在哪里,估计腾讯单独服务器地址。 -
构建
构建代码,我这里使用maven打包(最好设置下缓存,下次执行打包时,jar依赖直接从本地获取,缓存设置在【环境与缓存】配置)
配置打包命令和收集构建物
sh ‘mvn clean install’ // 构建 Maven 工程
echo “编译完成.”
archiveArtifacts artifacts: ‘**/target/*.jar’, fingerprint: true // 收集构建产物
archiveArtifacts(artifacts: ‘start.sh’, fingerprint: true, onlyIfSuccessful: false)
echo '收集构建产物完成. -
测试
这里根据自己写得单元测试来,作者比较懒,客户项目比较就没有做单元测试,读者可以根据实际情况来,如果有研究可以与我分享, -
部署
部署对运维来说,首要几个重要操作,连接服务器->文件上传->备份文件->停服务->启动服务
针对这个操作,
脚本如下:
def remote = [:]
def jarPath = ‘/root/workspace/target/xx.jar’ // 你的jar名字
def shellName = ‘start.sh’
def shellPath = ‘/root/workspace/start.sh’ //执行shell脚本,我目前放在工程根目录下
def soucePath = ‘/root/app/ssm/’ //存放目录
remote.name = ‘server’
remote.allowAnyHosts = true
remote.host = ‘服务器IP地址’
remote.port = 22
remote.user = env.USERNAME
remote.password = env.PASSWORD
// 我这使用用户名和密码登陆,为了安全可以使用私钥来进行登陆。官网有建议,可以去官网文档查看
withCredentials([usernamePassword(credentialsId: env.CREDENTIALS_SERVER_ID, usernameVariable: env.USERNAME, passwordVariable: env.PASSWORD)]) {
remote.user = env.USERNAME
remote.password = env.PASSWORD
// SSH 上传文件到远端服务器
sshPut remote: remote, from: jarPath, into: soucePath
// SSH 升级脚本到远端服务器
sshPut remote: remote, from: shellPath, into: soucePath
// 备份
sshCommand remote: remote, sudo: true, command: “cp -R /root/app/ssm/*.jar /root/app/ssm/bak/”
sshCommand remote: remote, sudo: true, command: “chmod a+x /root/app/ssm/start.sh”
sshCommand remote: remote, sudo: true, command: “/root/app/ssm/start.sh stop”
sshCommand remote: remote, sudo: true, command: “/root/app/ssm/start.sh start”
}
echo ‘部署完成’
附带脚本
#!/bin/bash
#package
APP_NAME=xxx.jar
#input param
usage() {
echo "Usage: input param [start|stop|restart|status]"
exit 1
}
#check server
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#start
start(){
pushd /root/app/ssm/
nohup java -jar $APP_NAME >/dev/null 2>&1 &
echo "${APP_NAME} is running..."
}
#stop
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
#status
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#restart
restart(){
stop
sleep 5
echo "sleep 5 s so start"
start
}
#param run method
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
触发规则
查看linux启动日志,就大功告成。
感谢您的阅读,还有很多优化地方。后面在做一版vue构建计划。