标签: jenkins-declarative-pipeline

Jenkins 多分支管道不尊重 Jenkinsfile 中的静默期

我正在使用具有安静期的声明性 Jenkinsfile:

  options {
    quietPeriod(180)
    // more options
  }
Run Code Online (Sandbox Code Playgroud)

工具版本:

  • 詹金斯 - 2.190.3
  • 管道多分支插件 - 2.21
  • 管道声明性插件 - 1.4.0

现在的问题是,在 GitHub SCM 更改上,独立管道项目尊重静默期,但多分支管道项目不尊重。它也不会返回任何错误,只是在接收到 webhook 时立即触发构建。

我知道关于此的未解决问题JENKINS-37588

使用上游包装器作业build(job: 'my-job', quietPeriod: 180)是不可行的,因为我有数百个多分支项目。

有没有人能够找到解决方案或可行的替代方案?任何帮助将不胜感激。

wait jenkins jenkins-pipeline multibranch-pipeline jenkins-declarative-pipeline

7
推荐指数
1
解决办法
2030
查看次数

如何在 Jenkins 声明式管道中使用 Throttle 并发构建

我有 Jenkins 声明性管道,用于触发数据库刷新的几个不同存储库,以及依赖于数据库的单元测试。这些 Jenkins 作业由 GitHub 中的拉取请求触发。

为了避免资源冲突,我需要防止这些作业同时运行——无论是在每个项目内还是跨项目。

“Throttle Concurrent Builds”插件似乎是为此而构建的。

我已经安装了插件并配置了一个类别,如下所示:

TCB系统配置

我在应限制其构建的存储库之一中的 Jenkinsfile 中添加了“限制”选项:

pipeline {

    agent any

    options {
        throttle(['ci_database_build'])
    }

    stages {
        stage('Build') {
            parallel {
                stage('Build source') {
                    steps {

                        // etc etc...
Run Code Online (Sandbox Code Playgroud)

但是,这似乎并没有阻止 2 个作业同时执行。作为证据,以下是同时执行的 2 个作业(均包含上述 Jenkisfile 更改):

同时运行的两个受限制的作业

我错过了什么?

jenkins jenkins-plugins jenkins-pipeline jenkins-declarative-pipeline

7
推荐指数
1
解决办法
2898
查看次数

如何在 Jenkins 声明性管道中禁用 bitbucket 的构建通知

我在多分支管道上使用此代码片段时遇到了问题

if (currentBuild.rawBuild.getCauses().toString().contains('BranchIndexingCause')) {
  print "INFO: Build skipped due to trigger being Branch Indexing"
  currentBuild.result = 'ABORTED' // optional, gives a better hint to the user that it's been skipped, rather than the default which shows it's successful
  return
}

pipeline{
........
Run Code Online (Sandbox Code Playgroud)

虽然代码本身很好地完成了它的工作并中止了构建,但我仍然得到

[Bitbucket] Notifying pull request build result
[Bitbucket] Build result notified
Run Code Online (Sandbox Code Playgroud)

我想跳过 bitbucket 通知,因为每当以前的构建成功时,这段代码都会使其显示为失败,从而造成混乱。

如何在 Bitbucket 中保留显示的最后结果

由于该代码片段位于 Jenkinsfile 中,它是否会在运行之前就中止构建

git bitbucket jenkins jenkins-pipeline jenkins-declarative-pipeline

7
推荐指数
0
解决办法
849
查看次数

jenkins 声明式管道中的模板 docker 代理

我有一个使用 docker 代理的声明性管道的 Jenkinsfile。许多步骤使用 docker 代理,并且为这些步骤添加相同的代理有点重复

例如

pipeline {
  agent any
  stages {  
    stage('Stage 1') {
      steps {
        //Do something
      }
    }
    stage('Stage 2') {      
      agent {
        docker { image 'jenkins/jenkins-slave:latest'
                 reuseNode true
                 registryUrl 'https://some.registry/'
                 registryCredentialsId 'git'
           args '-v /etc/passwd:/etc/passwd -v /etc/group:/etc/group -e HOME=${WORKSPACE}' 
        }                         
      }
      steps {
         //Do something
      }
    }
    stage('Stage 3') {
      steps {
        //Do something
      }
    }
    stage('Stage 4') {      
      agent {
        docker { image 'jenkins/jenkins-slave:latest'
                 reuseNode true
                 registryUrl 'https://some.registry/'
                 registryCredentialsId 'git'
           args '-v /etc/passwd:/etc/passwd -v …
Run Code Online (Sandbox Code Playgroud)

jenkins-docker jenkins-pipeline jenkins-declarative-pipeline

6
推荐指数
0
解决办法
1064
查看次数

Jenkins声明性管道:文件更改或创建新分支时执行阶段

我喜欢仅在某些文件已更改时才在声明性管道中建立一个阶段。这可以通过以下管道来实现:

pipeline {
  agent any

  stages {
    stage('checkout') {
        steps {
            checkout scm
        }
    }
    stage('build & push container') {
      when {
            anyOf {
                changeset 'Dockerfile'
            }
      }
      steps {
        echo "Building..."
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当创建一个新分支时,该构建不会建立,因为在第一次构建分支时,Jenkins中的变更集仍然为空。

当某些文件更改或创建新分支时when,如何定义构建条件stage

jenkins jenkins-declarative-pipeline

6
推荐指数
1
解决办法
1712
查看次数

在声明性詹金斯管道中获取 SVN 修订版

我有一个简单的问题:如何在声明性詹金斯管道中获取 svn 修订版。类似于这篇文章

到目前为止我发现了什么:

当您使用Freestyle 作业时,只需使用

${SVN_REVISION}
Run Code Online (Sandbox Code Playgroud)

当您使用脚本化管道时,请使用以下命令:

def scmVars = checkout([$class: 'SubversionSCM',...])
svnRevision = scmVars.SVN_REVISION
Run Code Online (Sandbox Code Playgroud)

结帐语法

但是如何在声明性管道中获得 SVN 修订版?SVN_REVISION未定义,def在声明性管道中不允许,并且checkout scm仅适用于多分支管道。

svn revision jenkins jenkins-declarative-pipeline

6
推荐指数
1
解决办法
7240
查看次数

在声明性 Jenkinsfile 之前运行脚本以使用扩展选择参数插件

我正在尝试运行一个脚本来实例化扩展选择参数变量以在声明性 jenkinsfile 属性部分中使用它,但是我无法在没有步骤的情况下在 jenkinsfile 中运行脚本。我不想将其作为输入步骤或脚本管道来执行。

所以我运行它首先是一个节点步骤,然后是一个管道步骤,如下所示:

import com.cwctravel.hudson.plugins.extended_choice_parameter.ExtendedChoiceParameterDefinition

node('MyServer') {

    try {
        def multiSelect = new ExtendedChoiceParameterDefinition(...)   

        properties([ parameters([ multiSelect ]) ])
    }
    catch(error){
        echo "$error"
    }
}

pipeline {

    stages {
        ....
    }
}
Run Code Online (Sandbox Code Playgroud)

它神奇地起作用了!需要注意的是,仅当我之前仅使用管道块运行过构建时。

那么,有没有更好的方法来运行以前的脚本到管道?能够为属性或步骤之外的其他地方创建对象以嵌入脚本块?

jenkins-pipeline extended-choice-parameter jenkins-declarative-pipeline

6
推荐指数
1
解决办法
2589
查看次数

jenkins Slave 的 PersistentVolumeClaim 工作区

PersistentVolumeClaim我正在尝试使用kubernetes-plugin来保留我的工作区

我已经创建了文件PV并将PVC其存储在本地磁盘上。该管道以前运行良好,但现在不再在本地磁盘上创建工作区。

这是我的管道。知道为什么不起作用吗?

def podTemplate = """
apiVersion: v1
kind: Pod
spec:
  containers:
  - name: maven
    image: maven
    command:
    - sleep
    args:
    - infinity
    volumeMounts:
      - name: workspace-volume
        mountPath: /home/jenkins/agent
    workingDir: "/home/jenkins/agent"
  volumes:
      - name: "workspace-volume"
        persistentVolumeClaim:
          claimName: "jenkins-slave-pvc"
          readOnly: false
"""


pipeline {
    agent none
    stages {
        stage ('maven') {
            agent { 
                kubernetes {
                    yaml podTemplate 
                    defaultContainer 'maven' 
                } 
            }
            stages {
                stage('Nested 1') {                  
                    steps {
                        sh "touch Nested1 && mvn …
Run Code Online (Sandbox Code Playgroud)

jenkins kubernetes jenkins-pipeline jenkins-declarative-pipeline jenkins-kubernetes

6
推荐指数
1
解决办法
5101
查看次数

如何使用动态数据在 Jenkins 管道中构建并行和顺序阶段的组合

我正在尝试构建一个结合了并行和顺序阶段的 Jenkins 管道。我能够使用静态数据完成相同的任务,但在使用动态数据时(即使用参数化构建并从构建参数读取数据时)无法使其工作。

下面的代码片段工作正常

pipeline {
agent any
stages {
    stage('Parallel Tests') {
        parallel {
            stage('Ordered Tests Set') {
                stages {
                    stage('Building seq test 1') {
                        steps {
                             echo "build seq test 1"
                            }
                    }
                    stage('Building seq test 2') {
                        steps {
                               echo "build seq test 2"
                        }
                    }
                    
                }
            }

            stage('Building Parallel test 1') {
                steps {
                    echo "Building Parallel test 1"
                }
            }
            stage('Building Parallel test 2') {
                steps {
                   echo "Building Parallel test 2"
                }
            }   
        } …
Run Code Online (Sandbox Code Playgroud)

jenkins devops jenkins-pipeline jenkins-declarative-pipeline

6
推荐指数
1
解决办法
6096
查看次数

jenkins 多分支声明性管道中每个分支的不同参数

我在多分支工作中使用 Jenkins 脚本化管道。

有一个参数应该只在主干中可用,而不是在多分支作业的任何分支中可用。

目前使用脚本化管道,这很容易做到(在共享库中或直接在 Jenkinsfile 上):

def jobParams = [
        booleanParam(defaultValue: false, description: 'param1', name: 'param1')
]

if (whateverCondition) {
    jobParams.add(booleanParam(defaultValue: false, description: 'param2', name: 'param2'))
}

properties([
        parameters(jobParams)
])
Run Code Online (Sandbox Code Playgroud)

我目前正在尝试迁移到 jenkins 声明式语法,但我没有看到创建仅在某些条件下可用的参数的简单方法(我知道我可以忽略它,但我真的不希望它显示它一点)。

到目前为止,唯一的解决方案是将管道也移动到共享库(自Declarative 1.2起可能)。我不喜欢这个解决方案,因为必须复制整个管道,这对于一行来说似乎有点过于极端。

if (whateverCondition) {
    pipeline {
      agent any
      parameters {
        booleanParam(defaultValue: false, description: 'param1', name: 'param1')
        booleanParam(defaultValue: false, description: 'param2', name: 'param2')
      }
    (...)
    }
} else {
    pipeline {
      agent any
      parameters {
        booleanParam(defaultValue: false, description: 'param1', name: 'param1')
      }
    (...)
    } …
Run Code Online (Sandbox Code Playgroud)

jenkins jenkins-pipeline jenkins-declarative-pipeline

5
推荐指数
0
解决办法
586
查看次数