gpt4 book ai didi

jenkins - 如何从指定分支而不是主分支加载 CPS 全局库?

转载 作者:行者123 更新时间:2023-12-02 12:23:01 24 4
gpt4 key购买 nike

我正在研究 Jenkins Pipeline Global Lib功能。这看起来很方便,但由于其全局性,任何有害的变化都会影响所有工作。因此,我希望能够在推送到不同分支上的 master 之前对其进行测试。

有没有办法指定我想要包含特定作业的全局库源的分支?

更新。我尝试了直接 git clone 的解决方法然后从测试分支 load我的库文件明确替换了自动加载的库文件。当这个库使用 src/ 中的一些其他类时,问题就出现了。 。因为在这种情况下,始终使用从 master 预加载的版本。

因此,在下面的条件下,它会从 feature-test 运行 common.groovy 但打印 Hello from master!!!!b.dummy()被调用。

Jenkins 中的管道脚本:

node('myhost'){
git url: 'ssh://10.0.0.1:12345/workflowLibs.git',
branch: 'feature-test'

dir ('src'){
load 'com/foo/Base.groovy'
}
dir ('vars'){
common = load 'common.groovy'
}
}

println common.dummy()

vars/common.groovy(功能测试):

package com.foo
def dummy(){
def b = new com.foo.Base()
b.dummy()
}

src/com/foo/Base.groovy(主):

package com.foo
def dummy(){
return 'Hello from master!!!!'
}

src/com/foo/Base.groovy(功能测试):

package com.foo
def dummy(){
return 'Hello from feature-test!!!!'
}

最佳答案

据我所知,这是不可能的 - 推送到此存储库的脚本无法通过具有不同的分支来进行版本控制。

您可以采取一些替代方法,其中涉及将脚本托管在外部存储库中(即不使用全局库存储库):

<小时/>

您可以使用Pipeline Remote Loader plugin ,它允许您从远程存储库中提取管道脚本,例如

def p = fileLoader.fromGit('bar/common.groovy', 
'https://example.com/foo/pipelines.git',
'test-branch', null, '')
p.doSomething()

您还可以使用此插件轻松从同一存储库加载多个管道脚本。

<小时/>

或者,您可以在管道执行中查看脚本 Git 存储库并直接加载脚本:

stage 'Load scripts'
def p
dir('tmp') {
git url: 'https://example.com/foo/pipelines.git',
branch: 'test-branch'
p = load 'bar/common.groovy'
}

stage 'Do something'
p.doSomething()
<小时/>

如果您想继续使用 Global Lib 存储库,您可以使用上述技术来测试脚本,然后设置 Jenkins 作业将脚本更改推送到主 Global Lib 存储库中。

关于jenkins - 如何从指定分支而不是主分支加载 CPS 全局库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35524686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com