我编写了以下代码,并希望向用户发送电子邮件通知。但是,我注意到有时会有“误报”报告。我只是想知道Jenkins声明性管道是否允许我使用实际执行状态来设置currentBuild.result。 (我想我应该使用currentBuild.result = 'SUCCESS'
或'FAILURE'
)。例如,start_up.sh /mydata/test.json
可以将'SUCCESSFUL'或'ERROR'写入文件。如何根据该文件的内容将currentBuild.result分别设置为“ SUCCESS”或“ FAILURE”?非常感谢。
pipeline {
agent {
docker {
image ...
args ...
}
}
parameters {
string(name: 'E_USERNANE', defaultValue: 'githubuser', description: 'Please input the username')
string(name: 'E_BRANCH', defaultValue: 'dev', description: 'Please input the git branch you want to test')
}
stages {
stage('build') {
steps {
echo "username: ${params.E_USERNANE}"
echo "branch: ${params.E_BRANCH}"
sh """
...
start_up.sh /mydata/test.json
...
"""
}
}
}
post {
failure {
// notify users when the Pipeline fails
mail to: 'xxxi@gmail.com',
subject: "Failed Pipeline * ${currentBuild.fullDisplayName}",
body: "Something is wrong with ${env.BUILD_URL}."
}
success {
// notify users when the Pipeline succeeds
mail to: 'xxx@gmail.com',
subject: "Success Pipeline * ${currentBuild.fullDisplayName}",
body: "The build ${env.BUILD_URL} is passed!"
}
}
}
答案 0 :(得分:0)
这是我在gitlab集成的某些项目中使用的示例...但是使用脚本化管道。 当构建失败以及恢复稳定时,会有电子邮件通知。
/* documentation pour les appels gitlab:
https://github.com/jenkinsci/gitlab-plugin#configuring-access-to-gitlab
Toujours utiliser la syntaxe scripted pipeline (et non declarative, merci)
Please read the fucking manual:
https://github.com/jenkinsci/gitlab-plugin
*/
// Reference the GitLab connection name from your Jenkins Global configuration (http://JENKINS_URL/configure, GitLab section)
if (env.BRANCH_NAME != 'developpement') {
properties([gitLabConnection('numagit'),
buildDiscarder(
logRotator(
numToKeepStr: '1',artifactNumToKeepStr: '1'
)
)
]
)
}
else {
properties([gitLabConnection('numagit'),
buildDiscarder(
logRotator(
numToKeepStr: '5',artifactNumToKeepStr: '1'
)
)
]
)
}
node {
try {
stage('Checkout sources') {
echo 'Checkout..'
checkout scm
}
gitlabBuilds(builds: [
"Compiling linux64",
"Compiling linux 32 bits",
"Compiling win32",
"Deploy"
]) {
try {
stage('Compiling linux64') {
gitlabCommitStatus("Compiling linux64") {
sh('rm -rf build64')
sh('mkdir -p build64')
dir('build64')
{
sh('schroot -c wheezy -- cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.tf64bits.cmake -DCMAKE_BUILD_TYPE=Release ..')
sh('schroot -c wheezy -- make all')
sh('schroot -c wheezy -- make install -j4')
}
}
}
} catch (e) {
currentBuild.result = "FAILURE" // make sure other exceptions are recorded as failure too
}
stage('Compiling linux 32 bits') {
gitlabCommitStatus("Compiling linux 32 bits") {
echo 'Building 32bits version'
sh('rm -rf Release')
sh('mkdir -p Release')
dir('Release') {
sh('cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.ubuntu32bits.cmake -DCMAKE_BUILD_TYPE=Release ..')
sh('make all')
sh('make install')
}
}
}
stage('Compiling win32') {
gitlabCommitStatus("Compiling win32") {
echo 'Building win32 version'
sh('rm -rf win32')
sh('mkdir -p win32')
dir('win32') {
sh('cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.mingw32.cmake -DCMAKE_BUILD_TYPE=Release ..')
sh('make all ')
sh('make install ')
}
}
}
stage('Deploy') {
gitlabCommitStatus("Deploy") {
echo 'Deploying....'
}
}
}
currentBuild.result = 'SUCCESS'
} // try
catch(all) {
echo "Il y a eu des erreurs"
currentBuild.result = 'FAILURE'
notifyFailed()
}
finally {
// Si le build passe de failure a normal
if (currentBuild.getPreviousBuild().result == 'FAILURE') {
if (currentBuild.result == 'SUCCESS') {
echo 'build has been fixed'
notifyFixed()
}
}
}
echo "RESULT: ${currentBuild.result}"
}
def notifyFixed()
{
emailext (
subject:"[Integration Continue] ${env.JOB_NAME} - Compilation # ${env.BUILD_NUMBER} - Build has been fixed",
body:"""
<p>Compilation fixed par commit ${env.GIT_COMMIT}
"<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>"
</p>
""",
recipientProviders:[[$class: 'DevelopersRecipientProvider'],[$class: 'CulpritsRecipientProvider']]
)
}
def notifyFailed() {
emailext (
subject:"[Integration Continue] ${env.JOB_NAME} - Compilation # ${env.BUILD_NUMBER} - FAILED:",
body:"""
<p>
Commit ${env.GIT_COMMIT}
Vérifier la sortie de la console pour voir le résultat de la compilation :
"<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>"
</p>
""",
recipientProviders:[[$class: 'DevelopersRecipientProvider'],[$class: 'CulpritsRecipientProvider']]
)
}