标签: jenkins-declarative-pipeline

Jenkins 声明式管道。post块中的条件语句

有一个詹金斯管道。需要/想要在构建成功时发送电子邮件。将有关所有分支的电子邮件发送到maillist-1并将 master 分支的构建过滤到maillist-master
我尝试使用ifwhenstatements-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)

如何实现想要的行为?

if-statement jenkins jenkins-declarative-pipeline

4
推荐指数
1
解决办法
1万
查看次数

如何在詹金斯的“修剪过时的远程跟踪分支”上执行代码?

当删除分支时,我想对作业创建的工件(例如 AMI、docker 镜像、terraform 服务)等执行额外的清理代码。我正在使用声明性管道,是否有挂钩或插件可以让我实现此目的?

jenkins jenkins-pipeline jenkins-declarative-pipeline

3
推荐指数
1
解决办法
6057
查看次数

声明性 Jenkins Pielines 在 SCM 结帐前运行命令

需要在 git checkout 通过管道代码开始之前运行命令。它类似于在 SCM 运行之前使用Run buildstep。提前致谢

jenkins jenkins-pipeline jenkins-declarative-pipeline

3
推荐指数
1
解决办法
2262
查看次数

在 Jenkins 声明式管道中使用 Docker for Windows

我正在使用 Jenkins 声明性管道和 Docker-for-Windows 代理通过Dockerfile.

注意:不幸的是,目前不是使用基于 Linux 的 docker 守护程序的解决方案,因为我需要运行 Windows 二进制文件。

设置: Jenkins master 通过 Docker 在 Linux 16.04 上运行。詹金斯构建代理是

  • Windows 10 企业版 1709 (16299.551)
  • Docker-for-Windows 17.12.0-ce

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)

jenkins docker dockerfile jenkins-declarative-pipeline

3
推荐指数
1
解决办法
2993
查看次数

将不同存储库的一个 Jenkinsfile 调用到另一个 jenkinsfile

我有一个如下所示的 Jenkinsfile-A,在这个文件中,我需要在执行所有阶段后调用另一个 Jenkinsfile-B。

\n\n

Jenkinsfile-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()\n
Run Code Online (Sandbox Code Playgroud)\n\n

Jenkinsfile-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

3
推荐指数
1
解决办法
9061
查看次数

在 Jenkins 声明式管道中找不到 Bash

我有 Jenkins 无法识别 bash 的问题。

我使用 golang 图像stageagentdocker一起运行。尝试运行 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?

谢谢。

bash containers jenkins docker jenkins-declarative-pipeline

3
推荐指数
1
解决办法
3272
查看次数

基于声明性管道中前一阶段结果的条件执行

我的管道设置如下。 在此处输入图片说明

我需要让它在遵守以下条件的情况下工作。帮助我定义何时使用块和其他代码以及在哪个阶段使用?

  1. 如果 A 失败,则不会执行其他阶段,并且作业运行被标记为失败。
  2. 如果任何 B 阶段失败,则不应调用相应的 C 阶段。
  3. 当 C1 或 C2 被执行时,阶段 D 应该被执行,而不管它们的执行是否失败。
  4. 此外,如果任何阶段失败,则整个作业运行状态应为失败。

我尝试并观察到了什么? 从上面定义的条件来看,1 和 2 按预期工作,但在我的以下尝试中没有 3 和 4。

在C1和C2,我加了catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE')继续詹金斯管道失败过舞台

但我观察到的是——

  1. 如果 C1 或 C2 失败,则 D 执行,但所有作业运行都标记为成功。预期是失败,因为其中一个 C 步骤失败了。但由于捕获它获得成功状态。
  2. 当任何 B 阶段失败时,它们对应的 C 也不会执行(预期),但也不会触发 D。因为我需要触发 D,因为已经执行了其他一些 C。

jenkins-pipeline jenkins-declarative-pipeline

3
推荐指数
1
解决办法
3062
查看次数

Scripted Pipeline 语法中并行内部的顺序阶段

在我的 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

3
推荐指数
1
解决办法
1603
查看次数

Jenkins 声明式管道:检查以前的构建状态

使用 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)

jenkins jenkins-groovy jenkins-declarative-pipeline

3
推荐指数
1
解决办法
7893
查看次数

如何在 Jenkins 声明性管道“选项”块中使用条件?

我想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//whenexpression,或者至少当我尝试时它不起作用。

我偶然发现的不起作用的来源/想法:1 , 2 , 3 , 4 , 5 , 6

continuous-integration jenkins jenkins-pipeline jenkins-declarative-pipeline

3
推荐指数
1
解决办法
1214
查看次数