jenkins-pipeline脚本
准备工作
添加获取构建人信息的插件
百度网盘 提取码:kdg6
全局凭据配置
构建脚本
def git_auth = "b03ccff0-267e-4677-abac-1330f58a08dd"
def test_harborUrl="xxxx:5000"
def hw_harborUrl="xxxxx:5000"
def hw_master="xxxxxxx:5000"
def harborProjectName="carloan"
def harbor_auth="f573918b-6e55-4f30-8692-6d51d0eef831"
def hw_harbor_auth="9fa4db1d-31ed-4573-8d36-70ec4a5fcf9a"
def buildUser
def gitCommitName
def gitCommitInfo
try{
node {
wrap([$class: 'BuildUser']) {
buildUser = env.BUILD_USER
echo buildUser
}
def my_env = "${edition_env}"
def sonar = "${sonar}"
echo "edition_env:"+my_env+" sonar:"+sonar
stage('remove old build') {
deleteDir()
}
stage('pull project') {
checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${project_git_url}"]]])
script {
gitCommitName = sh (script: 'git --no-pager show -s --format="%an"', returnStdout: true).trim()
gitCommitInfo = sh (script: 'git log -1 --pretty=%B', returnStdout: true).trim()
}
}
stage('build project') {
sh 'mvn clean install'
}
if(sonar == 'false'){
echo "user does not execute code scanning"
}else{
def sonarPath = pwd() +"/sonar-project.properties"
sonarfile = "sonar.projectKey=test_demo \nsonar.projectName=test \nsonar.projectVersion=1.0 \nsonar.sources=. \nsonar.exclusions=**/test/**,**/target/** \nsonar.java.source=1.8 \nsonar.java.target=1.8 \nsonar.sourceEncoding=UTF-8"
writeFile file: sonarPath, text: sonarfile
sh 'mvn sonar:sonar -Dsonar.host.url=http://xxxxx:9099 -Dsonar.login=4b5d77c70ba8c83601a667061696d08be6617f64'
}
stage('create DockerFile') {
def filePath = pwd() +"/Dockerfile"
docekrfile = "FROM xxxx:5000/sky-agent:8.5.0-jdk8\nVOLUME /opt \nADD target/dist/ / \nRUN mv /"+env.projectName+".jar /app.jar \nRUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \nRUN echo 'Asia/Shanghai' >/etc/timezone \nEXPOSE "+port+" \nENTRYPOINT [\"java\",\"-Djava.security.egd=file:/dev/./urandom\",\"-jar\",\"/app.jar\"]"
writeFile file: filePath, text: docekrfile
}
imageName_suffix="/"+harborProjectName+"/"+env.projectName+"-"+env.branch+":" + new Date().format("yyyyMMddHHmmss")
stage("build dockerImage"){
imageName=""
if(my_env == 'hw'){
imageName = hw_harborUrl + imageName_suffix;
} else {
imageName = test_harborUrl + imageName_suffix;
}
echo "imageName: "+imageName
sh 'docker build -t '+imageName+' .'
sh "docker push "+imageName
sh 'docker rmi '+ imageName
}
stage('restart project') {
if(my_env == 'hw'){
echo "执行 正式环境的启动"
sh 'docker -H carloan_hw:2376 service scale' + ' car_loan_'+env.projectName+'=2'
sleep 30
sh 'docker -H carloan_hw:2376 service update --image '+ hw_master + imageName_suffix +' car_loan_'+env.projectName
sleep 60
sh 'docker -H carloan_hw:2376 service scale' + ' car_loan_'+env.projectName+'=1'
} else {
echo "执行 test环境的启动"
sh 'docker -H carloan_test:2375 service scale' + ' car_loan_'+env.projectName+'=2'
sleep 30
sh 'docker -H carloan_test:2375 service update --image '+imageName+' car_loan_'+env.projectName
sleep 60
sh 'docker -H carloan_test:2375 service scale' + ' car_loan_'+env.projectName+'=1'
}
}
sh "/home/sendMsg.sh wechat " + buildUser + " " + env.projectName + " success " + "无 " + gitCommitName + " " + "\""+gitCommitInfo+"\""
}
}catch(e){
node {
echo "构建出错了,错误的原因如下:"
def reason = e.message
echo reason
sh "/home/sendMsg.sh wechat " + buildUser + " " + env.projectName + " fail " + "\""+reason+"\" " + gitCommitName + " " + "\""+gitCommitInfo+"\""
}
}
企业微信通知与钉钉通知脚本(钉钉未测试)
## echo 'type支持wechat/dingtalk'
TYPE="$1"
USER="$2"
SERVER="$3"
STATE="$4"
REASON="$5"
gitCommitName="$6"
gitCommitInfo="$7"
CHAT_CONTENT_TYPE='Content-Type: application/json'
echo "## send message for : ${TYPE}"
echo " url : ${CHAT_WEBHOOK_KEY}"
if [ _"${TYPE}" = _"wechat" ]; then
curl "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxx" \
-H "${CHAT_CONTENT_TYPE}" \
-d '
{
"msgtype": "markdown",
"markdown": {
"mentioned_list":['"${USER}"',"@all"],
"content" : "构建人:<font color=\"info\">'"${USER}"'</font>\n
构建服务:<font color=\"info\">'"${SERVER}"'</font>\n
最后提交人:<font color=\"comment\">'"${gitCommitName}"'</font>\n
提交log:<font color=\"comment\">'"${gitCommitInfo}"'</font>\n
构建状态:<font color=\"info\">'"${STATE}"'</font>\n
失败的原因:<font color=\"error\">'"${REASON}"'</font>\n
[点击查看详情](http://172.16.10.152:8082/)"
}
}'
elif [ _"${TYPE}" = _"dingtalk" ]; then
curl "${CHAT_WEBHOOK_URL}=${CHAT_WEBHOOK_KEY}" \
-H "${CHAT_CONTENT_TYPE}" \
-d '
{
"msgtype": "link",
"link": {
"text": "'"${CONTENT}"'",
"title": "'"${TITLE}"'"
}
}'
else
usage
exit 1
fi
注意:本文归作者所有,未经作者允许,不得转载