有一个詹金斯管道。需要/想要在构建成功时发送电子邮件。将有关所有分支的电子邮件发送到maillist-1并将 master 分支的构建过滤到maillist-master。
我尝试使用if和whenstatements-steps,但它们都在 post 块中失败。
pipeline {
agent ...
stages {...}
post{
success{
archiveArtifacts: ...
if( env.BRANCH_NAME == 'master' ){
emailext( to: 'maillist-master@domain.com'
, replyTo: 'maillist-master@domain.com'
, subject: 'Jenkins. Build succeeded :^) '
, body: params.EmailBody
, attachmentsPattern: '**/App*.tar.gz'
)
}
emailext( to: 'maillist-1@domain.com'
, replyTo: 'maillist-1@domain.com'
, subject: 'Jenkins. Build succeeded :^) '
, body: params.EmailBody
, attachmentsPattern: '**/App*.tar.gz'
)
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何实现想要的行为?
当删除分支时,我想对作业创建的工件(例如 AMI、docker 镜像、terraform 服务)等执行额外的清理代码。我正在使用声明性管道,是否有挂钩或插件可以让我实现此目的?
需要在 git checkout 通过管道代码开始之前运行命令。它类似于在 SCM 运行之前使用Run buildstep。提前致谢
我正在使用 Jenkins 声明性管道和 Docker-for-Windows 代理通过Dockerfile.
注意:不幸的是,目前不是使用基于 Linux 的 docker 守护程序的解决方案,因为我需要运行 Windows 二进制文件。
设置: Jenkins master 通过 Docker 在 Linux 16.04 上运行。詹金斯构建代理是
Docker 18.x 在尝试使用 Windows Containers 时让我头疼,所以我回滚到 17.x。当我尝试与 Jenkins 一起运行并且 nohup 不在路径上时,我仍然遇到了一些问题,但是通过将 Git 二进制文件添加到 Windows 搜索路径(另一个参考)解决了这个问题。我怀疑我当前的问题可能与此有关。
代码:我正在尝试初始化 aJenkinsfile并在其中运行一个简单的 hello-world-printout。
/詹金斯档案
pipeline {
agent none
stages {
stage('Docker Test') {
agent {
dockerfile {
filename 'Dockerfile'
label 'windocker'
}
}
steps {
println 'Hello, World!' …Run Code Online (Sandbox Code Playgroud) 我有一个如下所示的 Jenkinsfile-A,在这个文件中,我需要在执行所有阶段后调用另一个 Jenkinsfile-B。
\n\nJenkinsfile-A
\n\n#!groovy\xe2\x80\x8b\npipeline {\n agent { label "" }\n triggers { pollSCM(\'*/5 * * * *\') }\n stages {\n stage(\'Build Artifact\') {\n steps {\n }\n }\n stage(\'Publish Artifact\') {\n steps {\n }\n }\n }//stages\n post {\n always {\n deleteDir() /* clean up our workspace */\n }\n }\n}//pipeline\ndef jenkinsFile\nstage(\'Loading Jenkinsfile\'){\n\n jenkinsFile = fileLoader.fromGit(\'Jenkinsfile\', \'git@bitbucket.org:org-us-dev/org-cicd-pipelines.git\', \'master\', \'org-service-user\', \'ORG\')\n}\njenkinsFile.start()\nRun Code Online (Sandbox Code Playgroud)\n\nJenkinsfile-B
\n\n#!groovy\nvoid Download_Repositories(){\n}\nvoid SonarQube_Analysis(){\n}\nvoid Deploy_And_Test(){\n}\nvoid Prepare_Sonar_Scanner(){\n}\nvoid Publish_Artifact(){\n}\nvoid Host_Verification(){\n}\npipeline {\n agent { label \'\' }\n// triggers { pollSCM(\'*/5 * …Run Code Online (Sandbox Code Playgroud) groovy jenkins-groovy jenkins-pipeline jenkins-declarative-pipeline
我有 Jenkins 无法识别 bash 的问题。
我使用 golang 图像stage与agentdocker一起运行。尝试运行 sh 文件时,我收到此错误:
+ ./build/docker/docker.sh /home/jenkins/workspace/003-CGI-App-setup-ACS-build-4ZEA3UO3JRWIGZRIGIBD7BRQJV7JJ4LAKTS4XDXT6N3GDVU7Z4WA@tmp/durable-46264c73/docker.sh:line/build/script. docker.sh:未找到
这是我的舞台:
stage('Build & publish') {
agent {
docker {
image 'golang:1.10-alpine3.7'
}
}
steps {
checkout scm
unstash 'war'
sh 'export PATH=/bin/bash:$PATH'
sh 'cp XXX/XXX/target/*.war build/docker/ROOT.war'
sh 'chmod 777 ./build/docker/docker.sh'
sh 'go build -o XXX'
sh './XXX build'
sh './build/docker/docker.sh'
}
}
Run Code Online (Sandbox Code Playgroud)
我的 docker.sh 文件也以 开头#!/bin/bash。
有谁知道它是否与docker镜像有关?如果是,我是否正确添加了 bash?
谢谢。
我需要让它在遵守以下条件的情况下工作。帮助我定义何时使用块和其他代码以及在哪个阶段使用?
我尝试并观察到了什么? 从上面定义的条件来看,1 和 2 按预期工作,但在我的以下尝试中没有 3 和 4。
在C1和C2,我加了catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE')指继续詹金斯管道失败过舞台。
但我观察到的是——
在我的 Jenkinsfile 中,我并行执行 2 个阶段,其中一个阶段将包含几个其他顺序阶段。当我运行脚本并检查 BlueOcean 中的管道时,该阶段序列表示为单个节点。
(简化的)脚本如下:
node {
stage('Stage 1') {...}
stage('Stage 2') {...}
stage('Stages 3 & 4 in parallel') {
parallel(
'Stage 3': {
stage('Stage 3') {...}
},
'Stage 4': {
stage('Stage 4a') {...}
stage('Stage 4b') {...}
}
)
}
}
Run Code Online (Sandbox Code Playgroud)
因此,在 BlueOcean 中,此脚本导致第 4 阶段的一个节点,而我希望看到两个节点,因为它由两个连续的阶段组成。
jenkins jenkins-pipeline jenkins-blueocean jenkins-declarative-pipeline
使用 Jenkins声明式 管道检查前一阶段是否失败的最佳方法是什么,如果失败则运行回滚命令。
我只是尝试如下,但它抛出如下错误。
不允许脚本使用 org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper getRawBuild 方法。管理员可以决定是否批准或拒绝此签名。
stage('Deploy to production'){
when{
beforeAgent true
expression{return env.GIT_BRANCH == "origin/master"}
}
steps{
script{
echo "Deploying production environment"
sh "helm install ...."
}else {
error "Buid was not confirmed"
}
stage('Roll Back'){
when{
expression {
!hudson.model.Result.SUCCESS.equals(currentBuild.rawBuild.getPreviousBuild()?.getResult()) == true
}
}
steps{
script{
sh "helm rollback <release> 0"
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我想buildDiscarder根据全局变量进行不同的配置。目前我有
options {
buildDiscarder(logRotator(numToKeepStr: '5'))
}
Run Code Online (Sandbox Code Playgroud)
但我正在寻找类似的东西
// BROKEN
options {
if ("${SOME_VAR}" == 'some_val') {
buildDiscarder(logRotator(numToKeepStr: '5'))
} else {
buildDiscarder(logRotator(daysToKeepStr: '7'))
}
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以在 Jenkins 声明式管道中实现这种行为吗?我认为我不能在这里使用script//when块expression,或者至少当我尝试时它不起作用。
continuous-integration jenkins jenkins-pipeline jenkins-declarative-pipeline
jenkins-declarative-pipeline ×10
jenkins ×8
docker ×2
bash ×1
containers ×1
dockerfile ×1
groovy ×1
if-statement ×1