我有几个使用Jenkinsfile的项目,它们实际上是相同的。唯一的区别是它必须签出的git项目。这迫使我每个项目只有一个Jenkinsfile,尽管它们可以共享相同的一个:
node{ def mvnHome = tool 'M3' def artifactId def pomVersion stage('Commit Stage'){ echo 'Downloading from Git...' git branch: 'develop', credentialsId: 'xxx', url: 'https://bitbucket.org/xxx/yyy.git' echo 'Building project and generating Docker image...' sh "${mvnHome}/bin/mvn clean install docker:build -DskipTests" ...
有没有办法在作业创建期间将git位置预先配置为变量,以便我可以重用相同的Jenkinsfile?
... stage('Commit Stage'){ echo 'Downloading from Git...' git branch: 'develop', credentialsId: 'xxx', url: env.GIT_REPO_LOCATION ...
我知道我可以这样设置:
该项目已参数化->字符串参数-> GIT_REPO_LOCATION,默认= http:// xxxx,并使用env.GIT_REPO_LOCATION进行访问。
不利之处在于,提示用户使用默认值启动构建或更改构建。我需要它对他的用户是透明的。有办法吗?
您可以使用Pipeline Shared Groovy Library插件来拥有一个库,供您所有项目在git存储库中共享。在文档中,您可以详细了解它。
如果您有许多非常相似的管道,则全局变量机制提供了一种方便的工具来构建可捕获相似性的高级DSL。例如,所有Jenkins插件都是以相同的方式构建和测试的,因此我们可以编写一个名为buildPlugin的步骤:
// vars/buildPlugin.groovy def call(body) { // evaluate the body block, and collect configuration into the object def config = [:] body.resolveStrategy = Closure.DELEGATE_FIRST body.delegate = config body() // now build, based on the configuration provided node { git url: "https://github.com/jenkinsci/${config.name}-plugin.git" sh "mvn install" mail to: "...", subject: "${config.name} plugin build", body: "..." } }
假设脚本已作为全局共享库或文件夹级共享库加载,则生成的Jenkinsfile将大大简化: Jenkinsfile(脚本管道)
假设脚本已作为全局共享库或文件夹级共享库加载,则生成的Jenkinsfile将大大简化:
Jenkinsfile(脚本管道)
buildPlugin { name = 'git' }
该示例显示jenkinsfile如何将name = git传递给库。我目前使用类似的设置,对此非常满意。