问题标签 [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.
jenkins - 如何继续通过 Jenkins 声明性管道语法中的失败阶段
我想在 Jenkins 声明性管道语法中定义多个阶段,这些阶段可以继续通过其中任何一个失败。我找不到任何真正重复的现有问题,因为它们都假定或允许脚本语法。
澄清一下,我不是在寻找如何在脚本语法中完成此操作。我试图了解这种流控制是否真的在声明性语法中得到支持和形式化。为此,我将尝试准确定义我正在寻找的内容:
必需的
- 没有尝试/捕捉。我不想进入脚本模式,或者在另一个共享库或脚本块中“包装”我的声明性管道。
- 没有
post step
恶作剧。我想要真正的多个阶段,而不是一个阶段post always
包含我所有其他逻辑的步骤
可选的
- 失败阶段应被认定为失败;我不希望失败的阶段显示为绿色,因为它被“跳过”或“继续”。
- 任何阶段失败的构建都应标记为红色(或黄色,或任何非绿色)。
相关但不充分
jenkins - Jenkins 声明式管道 - 基于 git 分支动态选择节点(代理)
我有一个 Jenkins 主节点和从节点池,它们动态增长和缩小(基于负载)。主节点称为“主节点”,从节点具有名称指南。目前没有一个节点有标签。
对于我的项目,我希望 github 的“开发”分支构建在主节点上,并拉取请求分支构建在任何一个从属节点上。这已经在使用 node('master') 和 node('!master') 的脚本化管道中成功运行。
我想开始使用新的声明式管道样式。当前是否可以根据分支名称在声明式管道中实现相同的“主”和“非主”行为?
在脚本化的管道中,它看起来像这样:
谢谢
php - jenkinsfile docker agent 可以访问私有存储库和作曲家
我正在尝试在 Jenkinsfile 中使用声明性管道来构建我的 php 应用程序。我的 jenkins 在 docker 容器中运行,因为我也想将此服务器用于其他服务。
我现在的问题是,我还必须通过作曲家的公钥身份验证从 bitbucket 安装私有包。对于作曲家,我正在使用来自 docker hub 上的官方作曲家的 docker 容器。
这是我的詹金斯文件:
如果我使用sh 'composer install'
within sshagent(...){...}
,就像在我上面的文件中一样,它会失败并显示没有找到 composer.json 的信息。
如果我在sh 'composer install'
没有 sshagent 的情况下使用,composer 会按预期运行,但对于私有存储库会失败。
希望任何人都可以帮助我解决这个问题。
谢谢
jenkins - 如何在从属设备上执行的管道阶段中获取 Jenkins 主 IP/主机名?
我有一个 Jenkins 声明式管道,我在其中一个阶段构建并在另一个阶段在不同的机器上进行测试。我还有一个 Selenium 集线器,它与 Jenkins 主服务器在同一台机器上运行。
我希望在测试阶段运行的 Selenium 测试连接回 Jenkins 主机上的 Selenium 集线器,这意味着我需要从从机获取 Jenkins 主机的 IP 地址或主机名。
有没有办法做到这一点?Jenkins master URL / hostname 不在环境变量中,我不确定如何获取 Jenkins master 的 IP 地址。
jenkins - Jenkinsfile 访问现有环境变量
如何访问块SOME_VAR
内的现有环境变量environment
?
我想用新名称重新定义它NEW_VAR
?
到目前为止我尝试了什么:
java - Jenkins Pipeline Collection 方法 grep
我正在尝试在声明性管道中使用 java.util.Collection 中的 grep 方法,但它似乎有不同的签名。在脚本控制台中,我可以毫无问题地执行以下简单示例代码:
它返回包含元素 4 的数组,这正是我想要的。但是,当我在管道中执行类似的代码时,它返回一个布尔值,这不仅不是我想要的,它甚至不返回 true,当找到某些东西时,它总是 false。
我怀疑给定管道上下文,它执行名为 grep 的不同方法,而不是 Collection 中的方法,尽管代码相同,但我无法找出原因或如何更改它。
同样奇怪的是,我能够正确执行 Collection(例如 collect)中的大多数方法。
这显然只是我实际在做的一个简化示例。我真正想做的是基于返回 true 和 false 的 lambda 函数的集合过滤器。任何替代解决方案,不涉及仅迭代它并手动构建一个新数组,这已经是我目前非常丑陋的解决方法,同样受到欢迎。
docker - 如何在 Jenkins 声明性管道中将变量传递给 docker args
我正在创建一个 Jenkins 声明性管道作业,我在依赖于外部数据库容器的 docker 容器中运行一些节点测试。我创建了一个唯一的网络,然后尝试将网络 uid 作为 docker arg 传递,以便 docker 容器可以访问所述 db 容器:
但是,Jenkins 的输出显示,当 docker 收到变量时,变量以某种方式最终为空:
我确实注意到演示传递 args 的示例使用单引号,但我需要双引号以便myNetwork
正确扩展,但也许这不是管道方式。
如何正确地将变量传递给 docker?
编辑:在玩了一会儿之后,我认为这是一个范围问题,因为我能够成功地传递环境变量,例如env.BUILD_TAG
. 对于给定的作业运行,我基本上只需要一个随机的、有保证的唯一网络名称,这样我就不会与其他作业发生冲突 -env.BUILD_TAG
似乎可以完成这项工作,但我仍然想知道为什么我不能传入变量我在脚本中定义的。
jenkins - Jenkins 声明式管道并行步骤执行器
我正在将一项工作从 multijob 迁移到 Jenkins 声明式管道工作。我无法在多个执行器上运行并行步骤。
例如,在下面的管道中,我看到运行管道时只使用了一个执行器。
我想知道为什么只使用一个执行器。这个想法是每个并行步骤都将调用一个构建 docker 映像的 make 目标。
jenkins - Jenkinsfile 加载 groovy 文件无法按预期工作
我有一个包含以下内容的 Jenkinsfile:
当我执行此操作时,它似乎结帐 scm 但随后不打印任何内容。之后退出。在我的 dynamo.groovy 里面我有:
继承人的执行结果:
没有打印到这里或我的 jenkinsfile 中的声明,这是发送到 dynamodb pib-deployments 的作业状态
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
块内,但它似乎没有做任何事情 - 它甚至没有出现在控制台输出中。node
parallel
这是我的Jenkinsfile
:
我究竟做错了什么?