在Jenkins的流水线插件中从自定义位置选择JenkinsFile

4

Jenkins管道插件可以从自定义位置获取Jenkinsfile并开始构建吗?

我不想将Jenkinsfile放在源代码内部。如果源代码发生任何变化,则应选择来自自定义位置的Jenkinsfile并启动构建。

例如:/home/test/jenkinsfile


1
你能详细说明一下为什么想要这样做吗?也许有更好的方法来解决问题。 - Rik
我无法详细说明OP的动机,但我们在工作中遇到了这个问题,当我们想让Jenkins监视一个我们无法控制的第三方repo时。我们可以fork该repo并添加Jenkinsfile,或者如果有一种方法可以在Jenkins作业本身中指定Jenkinsfile内容,那么我们就可以避免fork该repo。 - Adam Parkin
你可以在某个位置拥有Jenkinsfile并使用-->load "/home/test/Jenkinsfile"。这将从该位置加载jenkinsfile。 - Goutham Nithyananda
2个回答

8
您当然可以尝试将自定义位置放置在其中(我不知道为什么不能),只要用户有权读取该位置即可。
如果它是多分支流水线,则no。因为索引是基于Jenkinsfile的存在(只有包含Jenkinsfile的分支才会被索引)。
将构建逻辑放在存储库中的想法是,这与您的源代码一起受到源代码控制。当您更改源代码并影响构建时,构建特定提交将具有所有逻辑。如果将此移出存储库,则构建逻辑和存储库很可能会失去同步。 编辑 您可以通过添加一个Jenkinsfile来解决此问题,该文件将加载其他文件。
Jenkinsfile:
load "/home/test/Jenkinsfile"

就我所知,目录是相对于工作区的。如果你有任何dir("path/to/other/dir"){..},那么它将相对于作业的工作区运行,这将使你的静态Jenkinsfile非常难以理解。


1
加载“/home/test/Jenkinsfile”,对我有用!!! 我将Jenkins文件放在外面,因为我们使用专有的源代码控制,当与git、svn等进行比较时,分支工作方式非常不同。 - Goutham Nithyananda
在与monorepo集成的自动化流水线中,我们需要将目录路径作为输入提供给Jenkinsfile。目录路径将是一个动态值,根据提交所在的项目文件夹而改变。在识别出项目文件夹后,我需要将文件夹名称作为变量传递,以从该项目文件夹加载Jenkinsfile。例如:load "/home/$FolderName/Jenkinsfile"。有人能提到一种处理这个问题的方法吗? - achilles
你能先评估一下路径吗? - Rik
还有,是否可以使用多分支项目并从任何其他位置加载Jenkinsfile? - jmunozco
我不确定。我已经有一段时间没有使用Jenkins了。不知道最近的发展情况。但我不知道为什么不行。如果您可以从多分支项目内访问文件(将其放入定义中),那就可以了。 - Rik

1
我认为有一种方法。
  • 使用常规的Jenkinsfile运行项目后,...
  • 创建一个新的Jenkinsfile.other文件
  • 进入您的存储库的Jenkins控制台
  • 查看作业配置
  • 向下滚动到构建配置部分
  • 将您的Jenkinsfile名称更改为Jenkinsfile.other
  • 运行构建。
我没有尝试创建克隆Jenkins作业,并编辑该作业以使两个始终可用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接