当前位置: 首页 > 知识库问答 >
问题:

Jenkinsfile:如何获取构建的触发器

华锦程
2023-03-14

我正在尝试弄清楚如何确定是什么导致构建从脚本化Jenkinsfile中运行。原因是我在docker容器中有一个脚本,我想在cron作业中运行它,所以当cron作业触发时,我只希望它运行容器,但当我推送更改时,我希望它检查代码、重建容器、运行静态代码分析、运行测试等。在cron运行中不需要所有这些。

我如何能得到原因?我尝试了< code > current build . get causes(),但是我得到

groovy.lang.MissingMethodException: No signature of method: org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper.getCauses() is applicable for argument types: () values: []

我尝试了<code>println currentBuild.getRawBuild()。getCauses(),但得到

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper getRawBuild

我如何在Jenkins文件中找到构建的原因?

共有3个答案

姬雪松
2023-03-14

触发生成的项目名称 (getUpstreamProject) 和内部版本号 (getUpstreamBuild):

currentBuild.rawBuild.getCauses().get(0).getUpstreamProject()
currentBuild.rawBuild.getCauses().get(0).getUpstreamBuild()

或者我认为可能不需要权限更改的另一种方式:currentBuild.getUpstreamBuilds(). get(0). getProjectName()

我需要上游项目的分支,我正在做的事情:

currentBuild.getUpstreamBuilds().get(0).getRawBuild().getEnvVars().get("BRANCH_NAME", "")

下面是关于它的文档:getEnvVars()

顺便说一下,您必须启用一大堆权限。

空正豪
2023-03-14
manager.build.causes

要使用,您需要批准这些签名

method org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder$BadgeManager getBuild
method hudson.model.Run getCauses

希望有帮助

龙晟睿
2023-03-14

此 Groovy 代码将获得触发项目的名称(并且在 Groovy 沙盒中运行良好):

String getTriggeringProjectName() {
    if (currentBuild.upstreamBuilds) {
        return currentBuild.upstreamBuilds[0].projectName
    } else {
        return ""
    }
}
 类似资料:
  • 我有一个Jenkins管道作业(不是多分支管道),管道内的逻辑之一是,当gitlab scm上有一个合并请求时,我想基于触发此生成的合并请求的源分支构建一些东西。 我的问题是,在Jenkinsfile中,我如何动态地获取这个源分支,签出代码,并创建一个工作区,以便在这个分支上运行构建?

  • 问题内容: 有没有一种方法可以使用Jenkinsfile 脚本化管道 语法来触发Jenkins作业每小时运行一次? 我看到了使用声明性语法的示例,但没有使用管道语法的示例。 声明式语法示例 问题答案: 您可以将此代码段用于: 属性的参考在这里。您可以搜索“ pipelineTriggers”字符串,并发现生成触发器可能是例如人工制品或此列表中的其他内容(从链接的文档页面中提取了2019-03-23

  • 我有一个不包含Jenkinsfile的存储库——我没有办法影响存储库本身。这意味着我既不能在存储库中添加也不能更改任何文件(在本例中,它是Qt-repo)。 我想做的是创建多个jenkinsfile,每个文件都为不同的目标配置和构建Qt库,或者运行不同的附加脚本<所有这些Jenkins文件将收集在不同的存储库中。 现在,我的问题是如何创建一个管道作业,一旦Qt存储库中发生更改,就会触发该作业,但使

  • 问题内容: 关于这个问题,有没有办法在使用多分支管道时从中获取等效信息?具体来说-自上次成功构建以来的提交列表。 目前,我们使用以下 但这仅在推送了多个提交时才返回触发构建的最后一个提交。我接受一个新分支的第一个构建可能是ambiguious但得到触发构建提交列表 时可能 会非常有用。 问题答案: 我找到了一种似乎对我们有用的解决方案。它围绕着获取提交哈希值,然后是提交哈希值。首先,我们编写了一个

  • 问题内容: 我正在使用Perl脚本使用LWP模块在Jenkins中触发构建。这行得通,但是执行完作业后,我想解析控制台输出。 有办法得到这个吗? 问题答案: 登录到Jenkins,并查看网页底部右侧附近的内容,然后单击链接。这将为您提供有关Jenkins RESTful API的信息 ,这是在您了解如何构造URL后从Jenkins提取信息的好方法。 并且,这是获取控制台文本的方法: 您可以使用Pe

  • 我的Jenkinsfile由几个阶段构建而成,可以由调度程序或通过推送到Gitlab来触发。我想使用触发器源来跳过触发器的几个阶段。我如何识别哪个事件触发了作业?