pipeline 语法实例一
Maven 编译 java 工程
/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
#!groovy
timestamps {
group_id = "www.jenkins-ci.cn"
artifact_id = "process-agent"
version = ""
packaging = "tar.gz"
artifact_description = "process-agent"
group_id_path = group_id.replaceAll("\\.", "/")
nexus_encdata_ci_url = "http://110.139.139.153:18090/service/local/repositories/jenkins-data-ci/content"
node("master") {
remote_rootdir = WORKSPACE.replaceAll("/workspace/${JOB_BASE_NAME}", "")
stage("CheckOut") {
git_repo_url = "ssh://git@110.139.139.118:12020/${repo_name}"
//checkout([$class: 'GitSCM', branches: [[name: "*/${branch_name}"]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: "${working_dir}"], [$class: 'CheckoutOption', timeout: 100]], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'gitlab-10.7.0', url: "${git_repo_url}"]]])
//checkout([$class: 'GitSCM', branches: [[name: "*/${branch_name}"]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: "${working_dir}"], [$class: 'CheckoutOption', timeout: 100]], submoduleCfg: [], userRemoteConfigs: [[url: "${git_repo_url}"]]])
sh """if [ -d ${working_dir}/.git ]; then
cd ${working_dir};
current_branch=\$(git branch |sed -e "s/\\* //g");
if [ \"\${current_branch}\" != \"${branch_name}\" ]; then
git checkout -f .;
git checkout -b ${branch_name};
git pull ${git_repo_url} ${branch_name};
else
git checkout -f .;
git pull ${git_repo_url} ${branch_name};
fi
else
git clone ${git_repo_url} -b ${branch_name} ${working_dir};
fi"""
}
stage("Build") {
sh "cd ${working_dir} && mvn -B -e -Dmaven.test.skip=true clean compile package"
//sh "cd ${working_dir} && mvn -B -e -Dmaven.test.skip=true clean compile package -Ddeploy.encrypt -Dencrypt.tool.dir=/usr/local/jar-encrypt"
}
stage("SonarQube") {
//sh "cd ${working_dir} && pwd " //mvn sonar:sonar -Dsonar.projectKey=process-agent -Dsonar.host.url=http://110.139.139.153:19000 -Dsonar.login=19a2f5971ec8ca982282505675f4ace19a2f59c636"
//sh "cd ${working_dir} && cd process-agent && mvn -B -Dmaven.test.skip=true clean package"
}
stage("Install NexusOSS") {
//sh "cd ${working_dir} && pwd && cd process-agent/target && mvn deploy:deploy-file -DgroupId=com.jenkins-ci -DartifactId=process-agent -Dversion=1.0.1-SNAPSHOT -Dpackaging=jar -Dfile=/home/jenkins/workspace/pipeline-process-agent-CI/process-agent/process-agent-core/target/data-engine.jar -Durl=http://110.139.139.153:18090/nexus/content/repositories/snapshots/ -DrepositoryId=snapshots"
//sh "cd ${working_dir} && cd process-agent && mvn -B -Dmaven.test.skip=true clean install"
sh "ssh root@110.119.151.134 'cp -rf /mnt/data/deploy/process-agent /mnt/data/deploy/scm-backup/'"
sleep 1
sh "ssh root@110.119.151.134 'rm -rf /mnt/data/deploy/scmdeploy/process-agent*.tar.gz'"
}
stage("Test Verification") {
sh "cd ${working_dir} && scp -r process-agent/target/process-agentl-*.tar.gz root@110.119.151.134:/mnt/data/deploy/scmdeploy"
sh "ssh root@110.119.151.134 'cd /mnt/data/deploy/scmdeploy && tar -xvf process-agent-*.tar.gz'"
sh "ssh root@110.119.151.134 rm -rf /mnt/data/deploy/process-agent && pwd"
sh "ssh root@110.119.151.134 'mv /mnt/data/deploy/scmdeploy/process-agent /mnt/data/deploy'"
sh "ssh root@110.119.151.134 'cd /mnt/data/deploy/process-agent && sh start.sh start'"
}
stage("Release") {
//sh "cd ${working_dir} && pwd && cd process-agent/target && scp data-engine.jar root@110.119.151.141:/mnt/data/deploy/scmdeploy"
//sh "cd ${working_dir} && pwd && mvn deploy:deploy-file -DgroupId=com.jenkins-ci -DartifactId=process-agent -Dversion=1.0-SNAPSHOT -Dpackaging=jar -Dfile=/home/jenkins/workspace/process-agent-CI/BASE-COMPONENTS/target/web-bcm.jar -Durl=http://110.139.139.153:18090/nexus/content/repositories/snapshots/ -DrepositoryId=snapshots"
//sh "cd ${working_dir} && cd process-agent && mvn -B -Dmaven.test.skip=true clean package"
}
stage("QualityReport") {
//sh "cd ${working_dir} && pwd && cd /home/jenkins/sonar_script/python3 sonarqube3.py process-agent"
//sh "cd ${working_dir} && pwd && mvn deploy:deploy-file -DgroupId=com.jenkins -DartifactId=process-agent -Dversion=1.0-SNAPSHOT -Dpackaging=jar -Dfile=/home/jenkins/workspace/process-agent-CI/BASE-COMPONENTS/target/web-bcm.jar -Durl=http://110.139.139.153:18090/nexus/content/repositories/snapshots/ -DrepositoryId=snapshots"
//sh "cd ${working_dir} && cd process-agent && mvn -B -Dmaven.test.skip=true clean package"
}
/*post {
always{
emailext body:
'''<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
<td>
<b><font color="#0B610B">Build Summary</font></b>
<hr size="2" width="100%" align="center" />
</td>
</tr>
<tr>
<td>
<ul>
<li>Project Name: ${PROJECT_NAME}</li>
<li>Build Number: # ${BUILD_NUMBER}</li>
<li>Build Cause: ${CAUSE}</li>
<li>Build Status: ${BUILD_STATUS}</li>
<li>Build Log: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>Build Url: <a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>Project Url: <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
</ul>
</td>
</tr>
</table>
</body>''',
subject: '[Jenkins Build Notification] ${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',
to: '12345@qq.com;',
from: '12345@163.com'
}
success {
//当此Pipeline成功时打印消息
echo 'success'
}
failure {
//当此Pipeline失败时打印消息
echo 'failure'
}
unstable {
//当此Pipeline 为不稳定时打印消息
echo 'unstable'
}
aborted {
//当此Pipeline 终止时打印消息
echo 'aborted'
}
changed {
//当pipeline的状态与上一次build状态不同时打印消息
echo 'changed'
}
}*/
/*post {
success {
emailext (
subject: "SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
body: """<p>SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p>
<p>Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>"</p>""",
to: "user1@qq.com,user2@qq.com",
from: "admin@sina.com"
)
}
failure {
emailext (
subject: "FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
body: """<p>FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p>
<p>Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>"</p>""",
to: "user1@qq.com,user2@qq.com",
from: "admin@sina.com"
)
}
}*/
/*stage("Upload artifact") {
version = sh (
script: 'date +%Y%m%d-%H%M%S',
returnStdout: true
).trim()
sh "cd ${working_dir} && cd 01bin/deployment && is_exist_file=\$(ls ${artifact_id}*.${packaging} |wc -l) && if [ \${is_exist_file} -ne 0 ]; then rm -f ${artifact_id}*.${packaging}; fi"
sh "cd ${working_dir} && cd 01bin/deployment && tar -czvf ${artifact_id}-${version}.${packaging} MVS_${product_version}_Server"
sh "cd ${working_dir} && cd 01bin/deployment && mv ${artifact_id}-${version}.${packaging} /tmp/ && /usr/bin/python ${remote_rootdir}/artifact_pull_push.py -g ${group_id} -a ${artifact_id} -v ${version} -p ${packaging} -P true -d '${artifact_description}'"
}*/
/* publishHTML (target: [
allowMissing: false,
alwaysLinkToLastBuild: false,
keepAll: true,
reportDir: 'coverage',
reportFiles: 'index.html',
reportName: "RCov Report"
]) /*
post{
success {
script {
if (sendmail == 'yes') {
emailext body: '''<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
offset="0">
<table width="95%" cellpadding="0" cellspacing="0"
style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
<td><br />
<b><font color="#0B610B">构建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>构建名称:${JOB_NAME}</li>
<li>构建结果: <span style="color:green"> ${BUILD_STATUS}</span></li>
<li>构建编号:${BUILD_NUMBER} </li>
<li>GIT 地址:${git_url}</li>
<li>GIT 分支:${git_branch}</li>
<li>变更记录: ${CHANGES,showPaths=true,showDependencies=true,format="<pre><ul><li>提交ID: %r</li><li>提交人:%a</li><li>提交时间:%d</li><li>提交信息:%m</li><li>提交文件:<br />%p</li></ul></pre>",pathFormat=" %p <br />"}
</ul>
</td>
</tr>
</table>
</body>
</html>
''', subject: '${PROJECT_NAME}', to: 'aaa@163.com,'
}
}
}
}
/*stage("jira issue") {
if (issue_id != "") {
withEnv(['JIRA_SITE=jira-7']) {
echo "issue_id: ${issue_id}"
//def fields = jiraGetFields idOrKey: "${issue_id}"
//echo issue.data.toString()
def issue = jiraGetIssue idOrKey: "${issue_id}"
issue_type = issue.data.fields.issuetype.name
issue_type_id = issue.data.fields.issuetype.id
issue_status = issue.data.fields.status.name
//echo issue.data.fields.issuetype.name
//echo issue.data.fields.status.name
if (issue_type == "任务" && issue_status == "已分配") {
def transitionInput = [transition: [id: '171']] // accept
response = jiraTransitionIssue idOrKey: "${issue_id}", input: transitionInput
echo response.successful.toString()
echo response.data.toString()
} else if (issue_type == "缺陷" && issue_status == "已分配") {
def transitionInput = [transition: [id: '171']] // confirm
response = jiraTransitionIssue idOrKey: "${issue_id}", input: transitionInput
echo response.successful.toString()
echo response.data.toString()
} else {
echo "当前 Issue 状态为:${issue_status}, 状态不作更新!"
}
// add artifact download link
nexus_artifact_url = nexus_encdata_ci_url + "/" + group_id_path + "/" + artifact_id + "/" + version + "/" + artifact_id+"-"+version+"."+packaging
//jiraAddComment idOrKey: "${issue_id}", comment: "发布包下载:${nexus_artifact_url}"
project_key = issue_id.replaceAll("-.*", "")
echo "project_key: ${project_key}"
def project = jiraGetProject idOrKey: "${project_key}"
//echo project.data.toString()
project_id = project.data.id.toString()
def editIssue = [fields: [ project: [id: "${project_id}"],
customfield_10200: "${nexus_artifact_url}",
customfield_10201: ["${product_version}"],
issuetype: [id: "${issue_type_id}"]]]
response = jiraEditIssue idOrKey: "${issue_id}", issue: editIssue
issue_edit_response = response.successful.toString()
echo "issue edit response: ${issue_edit_response}"
}
}
}*/
}
}
来源:oschina
链接:https://my.oschina.net/sh021/blog/4439711