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

声明式詹金斯管道,检索工件

万喜
2023-03-14
问题内容

我当前正在尝试触发现有作业,并在当前作业的工作区中接收生成的工件。

以下工作正常:

pipeline {
    agent {
        label 'builder-rpm'
    }

    options {
        timestamps()
        ansiColor('xterm')
    }

    stages {
        stage('Build Other pipeline') {
            steps {
                build job: 'Components/components-rpm-build', parameters: [
                    string(name: 'Component', value: 'foo'),
                ]
                copyArtifacts(
                    filter: 'results/*.rpm',
                    fingerprintArtifacts: true,
                    flatten: true,
                    projectName: 'Components/components-rpm-build',
                    selector: lastSuccessful(),
                    target: "${env.WORKSPACE}/dist"
                )
            }
        }
    }
}

问题是,这lastSuccessful()确实需要最后一次成功的构建,这意味着如果其他一些用户设法比我更快地运行并行构建,那么我将采用他们的工件而不是我的工件。

根据此页面
,应该有一种使用特定作业的方法specific

def built = build('downstream');
copyArtifacts(projectName: 'downstream',
              selector: specific("${downstream.number}"));

但是,没有关于如何在声明式管道中使用它的解释或示例。

有什么提示吗?

在此先感谢您的帮助。


问题答案:

我找到了一个不错的解决方案:切换到script简单的工作即可。

pipeline {
    agent {
        label 'builder-rpm'
    }

    options {
        timestamps()
        ansiColor('xterm')
    }

    stages {
        stage('Build Other pipeline') {
            steps {
                script {
                    def built = build(
                        job:'Components/components-rpm-build',
                        parameters:[
                            string(name:'Component', value:'ew-filesystem'),
                            string(name:'RepoServer', value:'')
                        ]
                    )
                    copyArtifacts(
                        projectName: 'Components/components-rpm-build',
                        selector: specific("${built.number}"),
                        target: "${env.WORKSPACE}/dist",
                        filter: "results/*"
                    )
                }
            }
        }
    }
}


 类似资料:
  • 我有bash脚本构建,标记和推docker图像到存储库。这是我的Jenkinsfile的一部分; 如何使用podTemplate执行我的步骤。当我使用docker容器进行阶段构建BMF后端时,我有这些错误; 无法连接到UNIX:///var/run/Docker.sock上的Docker守护进程。docker守护进程正在运行吗? /home/jenkins/workspace/bmf/bmf-we

  • 问题内容: 已解决 :感谢S.Richmond的以下答复我需要取消所有类型的存储映射,这意味着将变量和使用后作废。 附加 :搜索此错误的人员可能有兴趣使用Jenkins管道步骤- 在此处查找更多信息。 我正在尝试使用Jenkins Pipeline从用户那里获取输入,该输入作为json字符串传递给作业。管道然后使用隔离器对此进行解析,然后选择重要信息。然后,它将使用该信息与不同的作业参数并行运行1

  • 下面是我简单的jenkins pipeline groovy脚本,它将用这两个阶段和我们想要构建的作业创建一个管道,我希望在job configuration下的脚本中每次都更新用于构建和代码分析的作业名,方法是从用户界面中获取数据,用户将使用Eclipse提供构建作业名和代码分析作业名- jenkinsfile脚本:-

  • 问题内容: 我们有几个Java项目。每个项目都有自己的交付管道。 所有管道都具有以下共同的步骤(简化): 建立项目 发布项目 部署到测试环境 部署到生产环境 项目管道仅在项目特定的属性(例如服务名称或测试和生产环境的IP地址)上有所不同。 问题是:我们如何避免所有项目都有共同之处?Jenkins的“管道作为代码”是否提供类似管道模板的内容? 我可以想象一个模板将在我们的项目管道中节省很多冗余代码/

  • 我们正在运行詹金斯2。x和爱的新管道插件。但是,由于存储库中有这么多分支,磁盘空间很快就会填满。 是否有任何与管道兼容的插件,我可以在成功构建时清除工作区?

  • 我有一个Jenkins管道,其中有10个作业被配置为在post build操作中一个接一个地运行。只要与作业相关的git代码发生更改,就会触发构建,并运行以下所有作业,尽管没有提交作业代码的其余部分。 例如,在一系列的10个工作在管道中,如果有一个代码变化在第二个工作,但没有在第三个工作,那么我想跳过第二个工作,直接构建第三个工作。同样,任何代码没有更改的作业都希望跳过并跳到下面的作业。 配置更改