jenkins-pipeline---构建脚本

傻男人 1年前 ⋅ 656 阅读

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


全部评论: 0

    我有话说: