当前位置: 首页 > 面试题库 >

如何配置Jenkins 2管道,以便Jenkinsfile使用预定义变量

云昊阳
2023-03-14
问题内容

我有几个使用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(脚本管道)

buildPlugin {
    name = 'git'
}

该示例显示jenkinsfile如何将name = git传递给库。我目前使用类似的设置,对此非常满意。



 类似资料:
  • 问题内容: 我是詹金斯管道技术的新手。我正在定义一个声明性语法管道,但我不知道是否可以解决我的问题,因为我没有找到解决方案。 在此示例中,我需要将变量传递给ansible插件(在旧版本中,我使用ENV_VAR或使用inject plugin将其从文件中注入),该变量来自脚本。 这是我的理想情况(但由于环境{}而无法使用): 我尝试了其他方法来测试环境变量在其他文章中的工作方式,例如: 但“ ech

  • 我是詹金斯管道的新手;我正在定义一个声明性语法管道,我不知道我是否能解决我的问题,因为我没有找到解决方案。 我在其他帖子中尝试了其他方法来测试env var是如何工作的,例如: 但是“echo env.version”返回null。 还尝试了相同的示例:-version=-version=>props.file(并尝试注入它,但没有找到如何注入)

  • 我刚接触Kafka,我不知道如何使用“transforms.router.type”使其与我的Debezium设置一起工作。因此,我对java类进行了特殊的事件转换,并预先进行了配置,以便将其部署到容器中,如下所示: curl-X POST-H“Accept:application/json”-H“Content Type:application/json”localhost:8083/conne

  • 问题内容: jenkins管道插件可以从自定义位置选择jenkinsfile并开始构建吗? 我不想将jenkinsfile保留在源代码中。如果源代码有任何更改。应从自定义位置选择jenkinsfile并开始构建。 示例:/ home / test / jenkinsfile 问题答案: 当然,只要用户有权读取该位置,就可以尝试放置自定义位置(我不知道为什么不能这样做)。 如果是多分支管道,则为no

  • 问题内容: 如何 从Jenkinsfile(groovy)中获取Jenkins中管道配置字段“脚本路径”的内容? 在此处输入图片说明 在此示例中:我想在 执行Jenkinsfile本身时获取字符串’Apps / mq-logger / Jenkinsfile’ 。 问题答案: 您可以通过这种方式获取脚本路径 请注意,您必须approve 所有这些方法。

  • 使装饰器包含具有name属性的管道元数据。 此值将用于在模板表达式中调用此管道。 它必须是有效的JavaScript标识符。 实现PipeTransform接口的transform方法。 此方法接受管道的值和任何类型的可变数量的参数,并返回一个变换的(“管道”)值。 import { Component } from '@angular/core'; selector: 'app-root',