[Jenkins] 即将关闭,剩余生成将不会被执行问题解决

[Jenkins] 即将关闭,剩余生成将不会被执行

问题现象

该问题是最近才出现的,状态如下图所示,会提示 The Jenkins Controller is preparing for shutdown. No new builds can be started.​。
在这里插入图片描述

具体原因

在知乎上找到了有人和我遇到一样的问题,并且找到了问题所在,是由于构建超时和ThinBackup备份有关,ThinBackup默认设置等待空闲才开始备份(超时2小时会将Jenkins强制设置为quiet模式,而该模式下不会生成新的构建队列)。
在这里插入图片描述
  Reference:https://www.zhihu.com/question/444408386/answer/2224553578

解决方法

  1. 将超时的任务关闭
  2. 点击取消按钮,将剩余任务继续执行完
    在这里插入图片描述
  3. 进入ThinBackup插件设置目录,将等待空闲备份功能关闭,将图中的红框
### 环境变量隔离与固化上下文 在 Jenkins 中并行执行多个任务时,环境变量的共享和冲突问题可能导致构建失败或行为异常。为了解决此类问题,推荐在 Jenkinsfile 中使用上下文固化策略,确保每个分支使用独立的环境变量配置,避免因共享变量导致的污染。 一种有效的做法是在 Job 的初始阶段运行一个环境初始化脚本(如 `env_step.py`),将所有必要的环境变量固化到一个独立的上下文文件(如 `context.py`)中。后续的并行分支仅读取该上下文文件,不再直接访问原始配置文件(如 `jenkins_config.json`),从而避免并发访问导致的数据竞争和上下文污染。这种策略被广泛视为 Jenkins 并行执行中的最佳实践[^1]。 ### 并行任务中环境变量的处理示例 以下是一个 Jenkinsfile 的示例,展示如何在并行执行中隔离环境变量: ```groovy pipeline { agent any options { disableConcurrentBuilds(abortPrevious: true) } stages { stage('Initialize Context') { steps { script { // 执行环境初始化脚本,生成 context.py sh 'python env_step.py' } } } stage('Parallel Execution') { parallel { stage('Branch A') { steps { script { // 读取 context.py 中的变量 def context = readProperties file: 'context.py' echo "Executing Branch A with ENV: ${context.ENV_VAR_A}" } } } stage('Branch B') { steps { script { def context = readProperties file: 'context.py' echo "Executing Branch B with ENV: ${context.ENV_VAR_B}" } } } } } } } ``` 在上述流程中,`env_step.py` 负责生成 `context.py`,其中包含固化后的环境变量。每个并行分支通过读取该文件获取各自的变量,确保变量之间互不干扰。这种方式不仅提升了构建的稳定性,还增强了并行执行的安全性[^1]。 ### 使用独立节点避免环境变量冲突 另一种方式是将不同的并行分支分配到不同的 Jenkins 节点上执行,每个节点可以配置独立的环境变量集。例如,一个分支在 Linux 节点上运行,另一个在 Windows 节点上运行,各自使用本地的 `PATH` 和 `JAVA_HOME` 配置,从而避免冲突。 ```groovy stage('Parallel Execution on Different Nodes') { parallel { stage('Linux Build') { node('linux') { sh 'echo $JAVA_HOME' } } stage('Windows Build') { node('win') { bat 'echo %JAVA_HOME%' } } } } ``` 通过这种方式,不同平台的环境变量独立存在,彼此之间不会互相影响,适用于跨平台构建和测试场景。 ### 系统级并发控制 为了进一步避免并发构建时的环境变量冲突,可以在 Jenkinsfile 中添加 `disableConcurrentBuilds` 插件选项,防止同一 Job 的多个实例同时运行。该配置确保在某一时刻只有一个构建实例在执行,从而避免因多个实例共享全局环境变量导致的冲突。 ```groovy options { disableConcurrentBuilds(abortPrevious: true) } ``` 该配置在 Jenkins 的最佳实践中被推荐用于更安全地控制并发构建流程。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

锡城筱凯

你的鼓励是我创造的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值