问题标签 [jenkins-workflow]
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 插件看不到使用 withEnv 工作流程步骤设置的变量
我希望 gradle 插件能够获取在withEnv
步骤(或其他包装类型)中设置的环境变量。当我使用sh
步骤调用 gradle 时,找到了变量,但是当我使用 gradle 插件时,却没有。
gradle 插件执行与此等效的操作:
run.getEnvironment() 的 javadoc 指出:
返回包含用于启动此构建进程的环境变量的映射。调用外部进程的 BuildSteps 应该使用它。这允许 BuildWrappers 和其他项目配置(如 JDK 选择)生效。
与早期的 getEnvVars() 不同,此映射包含整个环境,而不仅仅是覆盖,因此可以内省值以更改其行为。
如果我调试插件,我发现环境中传递给 gradle 调用的变量少于十几个,这些变量withEnv
都不是应该提供的。据我所知,该sh
步骤使用了一个完全不同的扩展点,并且直接给出了一个EnvVars
看起来更完整的实例。我相当确定问题不在withEnv
,但我不知道如何修复 gradle 插件。
我打错电话了吗?或者可能是错误的扩展点?
jenkins - 在詹金斯手动批准后开始工作
我需要在作业 A 成功执行后触发作业 B。作业 A 成功执行后,将向审批者发送电子邮件通知。审批者将收到一封电子邮件并单击邮件链接。他将被路由到 Jenkins 页面,在那里他将批准 Job B 的执行。
我不确定使用哪个插件可以提及批准者的姓名,批准者如何在登录 Jenkins 页面后单击链接并简单地说“批准”。
jenkins-workflow - 如何使用 Jenkins Workflow 插件使 SCM 轮询工作
在一个普通的自由式项目中,我将 SCM 插件配置为指向我想要发布的 Git 存储库,并启用“Poll SCM”选项,它允许我配置一个 Stash webhook 以在发生更改时告诉 Jenkins到那个回购。这样,只要将更改推送到存储库,就可以触发作业。
但是当我使用工作流而不是自由式项目时,我需要构建的代码的 SCM 在 groovy 工作流脚本中以编程方式指定,这意味着它没有监听 Stash webhook。相反,直接在工作流中配置的 SCM 是 groovy 脚本本身的 SCM,它与我尝试构建/发布的代码库不同,因此我不希望触发器基于此。
关于在使用工作流插件时如何实现 SCM 轮询的任何想法?
jenkins - 如何在 Windows 上支持 Jenkins 从站的断开连接或重启?
我有许多长期运行的工作几乎需要一天才能完成。分裂是不可能的。如果网络出现故障,则所有进度都将丢失。从站如何在断开连接中幸存下来?
编辑 1
我有大约 300 个在 Windows 中运行的奴隶,它们与一个 Jenkins 实例相关联。
从站使用手动方法连接java - jar slave.jar -jlnpUrl <serverUrl> <slaveName>
。我无法将它们作为常规 Windows 服务运行,因为某些测试会操纵 GUI 元素并需要真正的交互式会话,否则测试会失败。
编辑 2
根据Jenkins Cookbook,我应该使用 Cygwin + OpenSSH 方法,而不是使用 JLNP 连接器的自定义脚本。这能提高稳定性吗?
jenkins - 为了与 Jenkins 工作流程并行运行,构建步骤必须是持久的吗?
我正在试验詹金斯工作流程中的并行步骤。目前我的流程看起来(基本上)是这样的:
两个输入都显示为在不同的执行器上运行,但是当我在两者上单击“继续”时,实际上只有第一个部署开始。部署作为自定义插件运行,该插件是为遗留作业编写的,并且很少转换为工作流。我没有看到任何关于等待执行者的明显消息,部署只是没有开始。第一个完成后,第二个将立即开始。
我必须在并行步骤允许两者运行之前实现 DurableTask (或其他东西吗?)?到目前为止,我的转换非常轻松,所以也许是时候尝试更真实的转换了。
jenkins - 工作流步骤能否访问 EnvironmentContributingAction 提供的环境变量?
我们为旧版本的 Jenkins 编写的自定义插件使用 EnvironmentContributingAction 为执行提供环境变量,以便它们可以在未来的构建步骤中使用并作为参数传递给下游作业。
在尝试将我们的构建转换为工作流时,我无法访问这些变量:
有没有办法访问注入的环境变量?我是否必须将此功能转换为构建包装器?
git - 如何使 git 功能分支与 jenkins-workflow 一起工作?
我正在尝试设置 jenkins-workflow 来进行我们的集成测试。我们的集成测试是这样工作的:
LibraryA
有人在 git 的功能分支中进行了更改。我们希望 jenkins 对功能分支中的代码运行单元测试,然后我们希望将此功能分支中的代码安装到client1
和client2
(它们是 的用户LibraryA
)并运行他们的测试。
除了正确提交LibraryA
. 相反,我的设置只是从LibraryA
.
我们有很多功能分支,因此在工作流设置中对特定分支进行硬编码并不合适。似乎应该有某种方法来获取触发工作流作业的提交的哈希(即使使用 SCM 轮询)。
我的设置如下所示:
所以,我目前的问题是如何设置 git repo/polling 以获得正确的提交以在第一个测试中运行,这将libraryA_version.txt
在后续测试中使用?
或者,我应该以完全不同的方式进行此过程吗?
jenkins - 在 Jenkins 工作流作业中使用锁
我想在工作流作业中使用锁定,以防止作业在同一节点上同时运行。
我想使用锁和闩锁插件的功能来控制作业的并行执行:当作业 A 开始在特定节点上构建时,作业 B 应该等到 A 完成,然后 B 才能运行。
我怎样才能做到这一点?还是有其他解决方案(以防工作流作业不支持锁定)?
谢谢你。
jenkins - Jenkins - 在其他项目上触发参数化构建
仅当父级成功完成并且有更改(更改推送到 scm)时,我如何才能触发参数化构建?
这是一个场景:我有 3 个构建:A、B 和 C。如果 B 被 A 调用或它有更改,则将构建 B。只有当 B 成功完成并且 B 是因为 scm 更改而不是因为它是由 A 触发而构建时,才应该构建 C
谢谢
jenkins-workflow - 如何使用工作流插件在 Jenkins 中的 workflowLibs 中共享代码
在我的workflowLibs目录中,我有几个文件:
Build.groovy看起来像这样:
Test.groovy看起来像这样:
我希望我的构建做这样的事情:
但我不知道如何在自己的目录中制作 Pipeline.groovy 参考文件。我试过这样做:
但我总是得到:
在workflowLibs目录结构中的 groovy 文件之间共享代码的正确方法是什么?