我正在使用具有安静期的声明性 Jenkinsfile:
options {
quietPeriod(180)
// more options
}
Run Code Online (Sandbox Code Playgroud)
工具版本:
现在的问题是,在 GitHub SCM 更改上,独立管道项目尊重静默期,但多分支管道项目不尊重。它也不会返回任何错误,只是在接收到 webhook 时立即触发构建。
我知道关于此的未解决问题JENKINS-37588。
使用上游包装器作业build(job: 'my-job', quietPeriod: 180)是不可行的,因为我有数百个多分支项目。
有没有人能够找到解决方案或可行的替代方案?任何帮助将不胜感激。
wait jenkins jenkins-pipeline multibranch-pipeline jenkins-declarative-pipeline
我有 Jenkins 声明性管道,用于触发数据库刷新的几个不同存储库,以及依赖于数据库的单元测试。这些 Jenkins 作业由 GitHub 中的拉取请求触发。
为了避免资源冲突,我需要防止这些作业同时运行——无论是在每个项目内还是跨项目。
“Throttle Concurrent Builds”插件似乎是为此而构建的。
我已经安装了插件并配置了一个类别,如下所示:
我在应限制其构建的存储库之一中的 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
我在多分支管道上使用此代码片段时遇到了问题
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
我有一个使用 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
我喜欢仅在某些文件已更改时才在声明性管道中建立一个阶段。这可以通过以下管道来实现:
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?
我有一个简单的问题:如何在声明性詹金斯管道中获取 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仅适用于多分支管道。
我正在尝试运行一个脚本来实例化扩展选择参数变量以在声明性 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
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
我正在尝试构建一个结合了并行和顺序阶段的 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
我在多分支工作中使用 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-declarative-pipeline ×10
jenkins ×8
bitbucket ×1
devops ×1
git ×1
kubernetes ×1
revision ×1
svn ×1
wait ×1