问题标签 [jenkins-declarative-pipeline]

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 投票
4 回答
27604 浏览

jenkins - 如何继续通过 Jenkins 声明性管道语法中的失败阶段

我想在 Jenkins 声明性管道语法中定义多个阶段,这些阶段可以继续通过其中任何一个失败。我找不到任何真正重复的现有问题,因为它们都假定或允许脚本语法。

澄清一下,我不是在寻找如何在脚本语法中完成此操作。我试图了解这种流控制是否真的在声明性语法中得到支持和形式化。为此,我将尝试准确定义我正在寻找的内容:

必需的

  • 没有尝试/捕捉。我不想进入脚本模式,或者在另一个共享库或脚本块中“包装”我的声明性管道。
  • 没有post step恶作剧。我想要真正的多个阶段,而不是一个阶段post always包含我所有其他逻辑的步骤

可选的

  • 失败阶段应被认定为失败;我不希望失败的阶段显示为绿色,因为它被“跳过”或“继续”。
  • 任何阶段失败的构建都应标记为红色(或黄色,或任何非绿色)。

相关但不充分

0 投票
2 回答
2794 浏览

jenkins - Jenkins 声明式管道 - 基于 git 分支动态选择节点(代理)

我有一个 Jenkins 主节点和从节点池,它们动态增长和缩小(基于负载)。主节点称为“主节点”,从节点具有名称指南。目前没有一个节点有标签。

对于我的项目,我希望 github 的“开发”分支构建在主节点上,并拉取请求分支构建在任何一个从属节点上。这已经在使用 node('master') 和 node('!master') 的脚本化管道中成功运行。

我想开始使用新的声明式管道样式。当前是否可以根据分支名称在声明式管道中实现相同的“主”和“非主”行为?

在脚本化的管道中,它看起来像这样:

谢谢

0 投票
0 回答
699 浏览

php - jenkinsfile docker agent 可以访问私有存储库和作曲家

我正在尝试在 Jenkinsfile 中使用声明性管道来构建我的 php 应用程序。我的 jenkins 在 docker 容器中运行,因为我也想将此服务器用于其他服务。

我现在的问题是,我还必须通过作曲家的公钥身份验证从 bitbucket 安装私有包。对于作曲家,我正在使用来自 docker hub 上的官方作曲家的 docker 容器。

这是我的詹金斯文件:

如果我使用sh 'composer install'within sshagent(...){...},就像在我上面的文件中一样,它会失败并显示没有找到 composer.json 的信息。

如果我在sh 'composer install'没有 sshagent 的情况下使用,composer 会按预期运行,但对于私有存储库会失败。

希望任何人都可以帮助我解决这个问题。

谢谢

0 投票
5 回答
27994 浏览

jenkins - 如何在从属设备上执行的管道阶段中获取 Jenkins 主 IP/主机名?

我有一个 Jenkins 声明式管道,我在其中一个阶段构建并在另一个阶段在不同的机器上进行测试。我还有一个 Selenium 集线器,它与 Jenkins 主服务器在同一台机器上运行。

我希望在测试阶段运行的 Selenium 测试连接回 Jenkins 主机上的 Selenium 集线器,这意味着我需要从从机获取 Jenkins 主机的 IP 地址或主机名。

有没有办法做到这一点?Jenkins master URL / hostname 不在环境变量中,我不确定如何获取 Jenkins master 的 IP 地址。

0 投票
1 回答
2181 浏览

jenkins - Jenkinsfile 访问现有环境变量

如何访问块SOME_VAR内的现有环境变量environment

我想用新名称重新定义它NEW_VAR

到目前为止我尝试了什么:

0 投票
1 回答
1356 浏览

java - Jenkins Pipeline Collection 方法 grep

我正在尝试在声明性管道中使用 java.util.Collection 中的 grep 方法,但它似乎有不同的签名。在脚本控制台中,我可以毫无问题地执行以下简单示例代码:

它返回包含元素 4 的数组,这正是我想要的。但是,当我在管道中执行类似的代码时,它返回一个布尔值,这不仅不是我想要的,它甚至不返回 true,当找到某些东西时,它总是 false。

我怀疑给定管道上下文,它执行名为 grep 的不同方法,而不是 Collection 中的方法,尽管代码相同,但我无法找出原因或如何更改它。

同样奇怪的是,我能够正确执行 Collection(例如 collect)中的大多数方法。

这显然只是我实际在做的一个简化示例。我真正想做的是基于返回 true 和 false 的 lambda 函数的集合过滤器。任何替代解决方案,不涉及仅迭代它并手动构建一个新数组,这已经是我目前非常丑陋的解决方法,同样受到欢迎。

0 投票
1 回答
5788 浏览

docker - 如何在 Jenkins 声明性管道中将变量传递给 docker args

我正在创建一个 Jenkins 声明性管道作业,我在依赖于外部数据库容器的 docker 容器中运行一些节点测试。我创建了一个唯一的网络,然后尝试将网络 uid 作为 docker arg 传递,以便 docker 容器可以访问所述 db 容器:

但是,Jenkins 的输出显示,当 docker 收到变量时,变量以某种方式最终为空:

我确实注意到演示传递 args 的示例使用单引号,但我需要双引号以便myNetwork正确扩展,但也许这不是管道方式。

如何正确地将变量传递给 docker?

编辑:在玩了一会儿之后,我认为这是一个范围问题,因为我能够成功地传递环境变量,例如env.BUILD_TAG. 对于给定的作业运行,我基本上只需要一个随机的、有保证的唯一网络名称,这样我就不会与其他作业发生冲突 -env.BUILD_TAG似乎可以完成这项工作,但我仍然想知道为什么我不能传入变量我在脚本中定义的。

0 投票
1 回答
5295 浏览

jenkins - Jenkins 声明式管道并行步骤执行器

我正在将一项工作从 multijob 迁移到 Jenkins 声明式管道工作。我无法在多个执行器上运行并行步骤。

例如,在下面的管道中,我看到运行管道时只使用了一个执行器。

我想知道为什么只使用一个执行器。这个想法是每个并行步骤都将调用一个构建 docker 映像的 make 目标。

0 投票
1 回答
637 浏览

jenkins - Jenkinsfile 加载 groovy 文件无法按预期工作

我有一个包含以下内容的 Jenkinsfile:

当我执行此操作时,它似乎结帐 scm 但随后不打印任何内容。之后退出。在我的 dynamo.groovy 里面我有:

继承人的执行结果:

没有打印到这里或我的 jenkinsfile 中的声明,这是发送到 dynamodb pib-deployments 的作业状态

0 投票
1 回答
4899 浏览

jenkins - 如何使用 Jenkins 声明式管道在多个平台上构建和测试

我正在尝试做一些我觉得应该很简单的事情,但我不知道如何做。

基本上我有一个 Jenkins 主机(在 Linux 上运行)和两个从机,一个在 Windows 上,另一个在 macOS 上。

我想在所有 3 个平台上构建我的项目并在所有 3 个平台上运行 GTest 测试。

我可以构建并运行测试,但 junit 步骤似乎没有收集任何测试结果。

我试图将post块放在任何地方,但它不起作用。如果我尝试将post块放在测试阶段或作为 的同级stages,我会收到以下错误:

Required context class hudson.FilePath is missing Perhaps you forgot to surround the code with a step that provides this, such as: node 这是由于agent none-post块不知道在哪里运行。

因此,我尝试在测试阶段的步骤中将块放在post块内,但它似乎没有做任何事情 - 它甚至没有出现在控制台输出中。nodeparallel

这是我的Jenkinsfile

我究竟做错了什么?