Jenkins 轮询或推送触发器作业也针对共享库更改运行

问题描述 投票:0回答:2

我在 git 存储库中将 Jenkins

Pipeline
工作定义为。

// File: deployment/jenkinsfiles/staging/Merge

@Library("my_shared_lib") _

import com.company.myteam.Constants

pipeline {
    agent { label "common" }

    triggers {
        pollSCM("H/2 * * * *")
    }

    options {
        buildDiscarder(logRotator(numToKeepStr: "50", artifactNumToKeepStr: "50"))
    }

    stages {
        stage ("Staging Merge") {
            steps {
                script {
                    def config = new Constants().repoconfig
                    ansiColor("xterm") {
                        myteam.pipelines.stagingMerge(config)
                    }
                }
            }
        }
    }
    post {
        always {
            cleanWs()
        }
    }
}

然后我创建了 jenkins 作业配置,如下所示。

Jenkins Job Config

现在,当我检查

Git Polling Log
时,它也进行了投票
shared-library

Started on Feb 25, 2020 5:33:07 PM
Using strategy: Default
[poll] Last Built Revision: Revision 681f996e689bdeb9cfca2b167002b8ccd99590cb (origin/staging)
using credential github_username_with_token
 > git --version # timeout=10
using GIT_ASKPASS to set credentials Github Service Account Username with token
 > git ls-remote -h https://[email protected]/myteam/myrepo # timeout=10
Found 6 remote heads on https://[email protected]/myteam/myrepo
[poll] Latest remote head revision on refs/heads/staging is: 681f996e689bdeb9cfca2b167002b8ccd99590cb - already built by 53
Using strategy: Default
[poll] Last Built Revision: Revision e80628ec7c9dbc59decbc81a3b884dcaa963a8dc (refs/remotes/origin/master)
using credential github_username_with_token
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repositories
 > git config remote.origin.url https://[email protected]/myteam/jenkins-shared-libraries.git # timeout=10
Fetching upstream changes from https://[email protected]/myteam/jenkins-shared-libraries.git
 > git --version # timeout=10
using GIT_ASKPASS to set credentials Github Service Account Username with token
 > git fetch --tags --progress https://[email protected]/myteam/jenkins-shared-libraries.git +refs/heads/*:refs/remotes/origin/* # timeout=10
Polling for changes in
 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
 > git log --full-history --no-abbrev --format=raw -M -m --raw e80628ec7c9dbc59decbc81a3b884dcaa963a8dc..869b3a16e07d21a88d557f1857376bfed7717a6e # timeout=10

每当我更改

jenkins-shared-library
中的代码时,它就会开始构建该作业。

我尝试了

https://issues.jenkins.io/browse/JENKINS-39615?focusedCommentId=280729&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-280729
中给出的workaround,但没有运气。

我将

pollSCM
更改为
githubPush
,但这也会在我更改
shared-library
时触发。

我尝试了https://issues.jenkins-ci.org/browse/JENKINS-41497中给出的解决方案作为

Ignore on push notifications
githubPush()
,但仍然是触发工作。

在搬到

pipeline
之前,我有
freestyle
项目。其中有源代码管理部分,我们可以在其中定义分支,并且
githubPush()
仅监听该分支。

Source Code Management

当我们选择项目类型为

pipeline
时,没有源代码管理部分。可能是因为这个原因,它监听所有推送事件。

通过

push
poll
,我想限制我的詹金斯工作仅在
myrepo.git
发生更改时触发。

git jenkins push-notification jenkins-pipeline polling
2个回答
0
投票

我不知道如何解决这个问题

Task Type
。但是,如果您可以切换到多分支管道。此问题已通过该任务类型解决。 enter image description here


0
投票

我知道这个问题已经很老了,但是对于任何发现这个问题的人来说,我已经找到了解决方案,或者至少是解决方法。

正如您在问题中提到的,在依赖 SCM 轮询的詹金斯管道作业中使用共享库来触发作业会导致作业的 SCM 轮询也包括轮询共享库的 SCM。

共享库配置有默认分支。该分支的

HEAD
是轮询更改的内容。将更改合并到配置的默认分支更改
HEAD
,从而导致触发。

我使用的解决方法是在共享库存储库中标记对我的共享库的更新,并在我想要“部署”我的共享库更新到我的所有管道时更新共享库默认分支工作机会。

标签(通常)不会更改,因此即使作业继续轮询共享库 SCM,标签引用也不会更改,并且在将更改合并到我的共享库存储库时不再触发作业。

附加说明:我惊喜地发现,当我更新 Jenkins 中的共享库配置以指向共享库存储库中的新标签时,不会触发作业。

是的,这个解决方法是更新共享库时的额外步骤,但我发现这些额外步骤比处理触发 SCM 更改的作业要省力得多,我希望它们忽略。

示例:

shared-lib with default branch using a tag

最后注意:允许覆盖默认版本选项非常方便。在我需要管道来继续使用旧标签的情况下,或者如果我想测试尚未标记的更新,我可以在管道脚本中执行此操作,例如:

// use an earlier tag for this pipeline:
@Library('my-shared-lib@v1_1_0`) _
pipeline { 
  // ....
}
// use the HEAD of the main branch for this pipeline: 
@Library('my-shared-lib@main')
pipeline {
  // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.