我有一个开源项目,驻留在GitHub中,并使用由Jenkins控制的构建场来构建。具有外部定义的Jenkins文件的多分支配置
我想使用管道以分支方式构建它,但我不想将Jenkinsfile存储在代码中。有没有办法做到这一点?
我有一个开源项目,驻留在GitHub中,并使用由Jenkins控制的构建场来构建。具有外部定义的Jenkins文件的多分支配置
我想使用管道以分支方式构建它,但我不想将Jenkinsfile存储在代码中。有没有办法做到这一点?
首先,为什么你不想在代码中使用Jenkinsfile?流水线和代码文件一样重要。
除此之外,你可以加载groovy文件作为管道脚本进行评估。您可以从SCM选项的不同位置执行此操作,然后检出实际的代码。但这会迫使您手动处理分支构建。
另一种选择是拥有一个非常基本的Jenkins文件,只检出一个外部管道。
你会得到这样的事情:
node{
deleteDir()
git env.flowScm
def flow = load 'pipeline.groovy'
stash includes: '**', name: 'flowFiles'
stage 'Checkout'
checkout scm // short hand for checking out the "from scm repository"
flow.runFlow()
}
凡pipeline.groovy文件将包含实际的管道应该是这样的:
def runFlow() {
// your pipeline code
}
// Has to exit with 'return this;' in order to be used as library
return this;
我也遇到同样的问题,因为你。尽管将构建过程作为代码的一部分的想法很好,但有信息表明Jenkinsfile
包含的内容不是项目构建本身固有的,而是特定于可能更改的构建环境实例。
我做到了这一点的方法是:
封装核心构建过程中的一个脚本(build.py
或build.sh
)。这可以调用特定的构建工具,如制作,CMake的,蚂蚁等
通过Jenkinsfile
告诉詹金斯来调用一个全局库中定义的函数
定义全局詹金斯建立函数来调用编译脚本(例如build.py
)与适当的环境设置。例如,使用自定义工具并设置PATH
。
所以对于第2步,在项目中创建一个Jenkinsfile
只包含线
build_PROJECTNAME()
其中PROJECTNAME
是基于项目的名称。
然后使用Pipeline Shared Groovy Libraries Plugin,并呼吁vars/build_PROJECTNAME.groovy
包含设置环境和调用项目构建脚本的代码(例如build.py
)共享库的储存库创建一个Groovy脚本:
def call() {
node('linux') {
stage("checkout") {
checkout scm
}
stage("build") {
withEnv([
"PATH+CMAKE=${tool 'CMake'}/bin",
"PATH+PYTHON=${tool 'Python-3'}",
"PATH+NINJA=${tool 'Ninja'}",
]) {
execute 'python build.py'
}
}
}
}
我不想它在开源项目中,因为构建脚本依赖于构建环境:它们包含工具的绝对路径,取决于特定的OS /工具版本等。他们将在存储库中完全无用。CI作为代码非常适合专有产品,这绝对会*在企业环境中建立。 –