问题标签 [jenkinsfile]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
2640 浏览

jenkins - Jenkinsfile java.lang.NoSuchMethodError: No such DSL method '$' found between steps

尝试部署到 MESOS 时出现以下奇怪错误。

代码片段如下所示

不幸的是,它失败并出现以下错误

我可以看到我安装了 marathon 1.3.2 插件。然而,似乎有些不对劲。

安托万

0 投票
0 回答
668 浏览

jenkins - 如何在不调用静态方法的情况下在 groovy Jenkinsfile 中转义 XML 字符

在我的 Jenkinsfile 中,我需要构造一个由参数值组成的 XML 字符串。一些值需要“xml 转义”,以便它们可以设置为 XML 属性。

一种明显简单的方法是调用“XmlUtil.escapeXml(text)”(尽管我猜这不会包含空格)。

然而,这在高层次上失败了,因为 Jenkinsfile 不允许调用静态方法。

在 Jenkinsfile 中做这类事情的最简单策略是什么?

更新

在记住了更多 Groovy 原则之后,我意识到 MarkupBuilder 将是解决此问题的方法,但它甚至不允许:“不允许使用新的 groovy.xml.MarkupBuilder 的脚本”。

更新

好的,我已经能够覆盖安全限制,但现在我发现在 Pipeline DSL 中使用 MarkupBuilder DSL 存在问题。

我在 Jenkinsfile 的末尾(在整个“节点”块之后)定义了以下方法:

我在 groovyConsole 中对此进行了测试,它运行良好。

但是,当我运行调用此方法的作业时,我得到以下信息:

java.lang.NoSuchMethodError:在步骤 [VersionNumber、archive、awaitDeployment、...

列出的步骤来自 Pipeline DSL,因此“methodMissing”查找似乎将转到 Pipeline DSL,而不是 MarkupBuilder 类。

请注意,我尝试将“@NonCPS”添加到方法定义中。那没什么区别。

更新

我已经找到了解决方案。将“statement”更改为“delegate.statement”可以解决这个问题。

0 投票
2 回答
4150 浏览

intellij-idea - Jenkinsfile DSL 源代码

我正在使用 intelliJ 在 Jenkinsfile 中开发新的管道。

当我使用带有 pipeline-dsl 插件的 jenkins 1 时,我可以进入源代码并查看 DSL 是如何在org.jenkins-ci.plugins:job-dsl-core. 我想拥有与 Jenkinsfile 相同的能力。

我可以以某种方式连接 Jenkinsfile DSL 和 intellij 以获得适当的代码完成和源代码洞察力吗?

0 投票
2 回答
3607 浏览

python - Jenkinsfile 语法 - 是否有共享 python 构建步骤的 DRY 示例?

我有一个带有共享 python 构建脚本的仓库“A”,我今天在 Jenkins 的各种“执行 shell”构建步骤中运行它。我从 job-dsl groovy 代码中播种了这些步骤/脚本。

在存储库“B”(我的应用程序源代码所在的位置)中使用较新的 Jenkins 2 流水线概念,我在这个存储库中的 Jenkinsfile 必须是什么样子才能使其保持干燥并重用我现有的 python 构建脚本?

我研究了插件'workflow-cps-global-lib',并尝试在我的 Jenkins 主机上设置“管道库”,但由于这个设置面向 groovy,它不仅感觉像是正确的方法,或者我只是这样做没有掌握正确的语法。我找不到有关此特定用例的任何示例。

基本上我只想在我的 Jenkinsfile 中这样做:

  1. 为我的应用克隆我的源代码库 ('B')
  2. 使我的存储库“A”中的共享 python 构建脚本可用
  3. 从各种“执行 shell”步骤执行 python 构建脚本
  4. 等等...
0 投票
1 回答
197 浏览

git - 使用 Jenkinsfile 处理变化的变量

我希望了解如何最好地处理以下问题。

我的主分支上有一个 Jenkinsfile 运行类似的东西

因此,它构建了 3 个独立的应用程序,这些应用程序在此过程中都相互连接。

我想要做的是有一种方法,当创建功能分支时,构建需要在每个应用程序的不同分支上运行。虽然这可以手动更改并提交,但当任何合并到 master 完成时,该信息仍将存在,然后更改 master 构建。

有没有一种有效的方法来处理这种设置?

谢谢

0 投票
3 回答
3592 浏览

jenkins - 如何从詹金斯“带密码的用户名”参数中提取用户名和密码?

我有一份 Jenkins 管道工作。它需要几个参数,其中一个是“带密码的用户名”参数,它设置为我已经配置的“服务帐户”。

这在“StashNotifier”中用于通知 BitBucket 构建结果。

我现在必须在作业中添加一些“scp/ssh”步骤,并且我想使用相同的服务帐户主体和凭据。我可以手动添加两个参数,即服务帐户参数的用户名和密码的冗余副本,但我真的很想从现有的“用户名和密码”参数中提取部分。

有可能这样做吗?

0 投票
0 回答
899 浏览

maven - 如何使用 docker.image 为 Jenkins 构建提供托管文件?

我正在尝试使用 Jenkins Pipelines 构建一个 Maven Java 项目并将其工件部署到 Nexus 中。Nexus 凭据由 Jenkins 管理,因此我需要 Jenkins 提供 Maven settings.xml 文件。我的管道用于docker运行构建。我的Jenkinsfile样子:

到目前为止,我无法提供正确的 Maven 设置。withMaven 有一些“知道限制”(Maven 管道插件,https: //wiki.jenkins-ci.org/display/JENKINS/Pipeline+Maven+Plugin )

有解决方法吗?我尝试使用 configFileProvider,但由于安全原因,它会抛出 UnsupportedOperationException。

0 投票
0 回答
1295 浏览

jenkins - Jenkinsfile 中的 sshagent 块导致 NotSerializableException

在管道作业的 Jenkinsfile 中,我需要将 javadoc jar scp 到远程主机。我整天都在为完成这项工作而苦苦挣扎,但仍然无法正常工作。

我正在尝试为此使用“sshagent”。我定义了一个“带有私钥的用户名”凭据,我从块中引用它。在该块中,我构建了一些 scp/ssh shell 命令来运行。

我在舞台上的代码块目前看起来像这样:

当我运行它时,我看到以下内容:

堆栈跟踪没有提供任何关于脚本中哪一行存在问题的直接线索。我尝试注释掉“sshagent”块,并且没有发生异常(并且该作业没有做任何有用的事情),因此很明显错误来自该块。

我听说序列化问题通常表明要使用 @NonCPS 方法,但我不明白如何转换它来解决这个问题。

0 投票
1 回答
1407 浏览

git - Jenkinsfile 通过 git 命令签出到特定文件夹

我想在 jenkinsfile 中运行这个命令

但我得到这个错误

知道如何在 Jenkinsfile 中进行操作吗?我可以将文件签出到特定文件夹吗?

0 投票
3 回答
7125 浏览

jenkins - 如何从没有 jenkinsfile 的存储库触发 Jenkins 管道构建?

我有一个不包含Jenkinsfile的存储库- 我无法影响存储库本身。这意味着我不能在存储库中添加或更改任何文件(在这种情况下,它是Qt repo)。

我想要做的是创建多个 Jenkinsfile,每个都为不同的目标配置和构建 Qt 库,或者运行不同的附加脚本。
所有这些 Jenkinsfile 将被收集在不同的存储库中。

现在,我的问题是如何创建一个管道作业,一旦 Qt 存储库中有更改,它就会被触发,但使用来自另一个存储库的 Jenkinsfile。

研究给我留下了 - 据我所见并根据这些 帖子 -有两个选择:

  • 将两个存储库添加到定义部分 - 类似于以下内容:
    在此处输入图像描述 不幸的是,这对我不起作用,因为两个存储库仍然需要一个 Jenkinsfile。此外,我无法为每个存储库指定不同的分支,因此我无法监听特定的 Qt 版本分支。

  • 我看到的第二个(嗯,可能是唯一的)选项是创建一个自由式 Jenkins 作业,它只监听 Qt 存储库并在更改时触发管道作业的构建作为其唯一操作。

我认为,第二种方法对我有用,但我想知道的是,是否有任何插件、配置选项或我错过的任何东西可以以更清洁的方式解决这个问题,或者上述是否是解决问题的方法做。