如何在 Teamcity CMD 步骤失败时触发脚本?
How to trigger a script on a Teamcity CMD step failure?
我有一个运行带有内联 bash 脚本的 CMD 步骤的 TeamCity 作业。
如果用户取消作业或作业失败,我想通过 tcp 向另一个系统发送通知。
我在脚本中放入了一个陷阱处理程序,但陷阱没有触发,这表明它没有传递任何常用信号。
#!/usr/bin/env bash
function handle_error() {
echo "TRAPPED "
exit 1;
}
trap 'handle_error ERR' ERR
trap 'handle_error INT' INT
trap 'handle_error TERM' TERM
trap 'handle_error QUIT' QUIT
trap 'handle_error EXIT' EXIT
for i in $(seq 30); do echo $i; sleep 1; done
我在开始作业然后取消作业时得到以下输出。
[11:34:36][Step 1/1] Starting: /opt/teamcity_agent_a11/temp/agentTmp/custom_script4059331588446614618
[11:34:36][Step 1/1] in directory: /opt/teamcity_agent_a11/work/84217cc201b5cd23
[11:34:36][Step 1/1] 1
[11:34:37][Step 1/1] 2
[11:34:38][Step 1/1] 3
[11:34:39][Step 1/1] 4
[11:34:40][Step 1/1] 5
[11:34:43][Step 1/1] Process exited with code 137
[11:34:43][Step 1/1] Step Command Line interrupted
[11:34:44]Build was interrupted. Artifacts will not be published for this build
[11:34:44]Build canceled
TRAPPED 消息没有出现。有没有办法让这个工作?
或者,是否可以配置 TeamCity 以在该作业失败或被取消时触发另一个脚本?
--更新--
我现在发现,自 10.0.2 以来,TeamCity 提供了通过参数控制此行为的功能。
通过设置 teamcity.force.kill.process.on.cancel.build=false
,Teamcity 将首先发送一个 SIGTERM,然后在 之后发送一个 SIGKILL =]60 秒(可通过 teamcity.force.kill.process.on.cancel.build.timeout.sec
覆盖)如果还活着
此工单中的更多详细信息:https://youtrack.jetbrains.com/issue/TW-13367#comment=27-1573848
根据Exit Codes With Special Meanings的描述,退出代码137
表示进程被SIGKILL
杀死,
can not be caught, blocked or ignored
根据 docs(参见 12.1.2. Usage of signals with kill
部分)
我现在发现,自 10.0.2 以来,Teamcity 提供了通过参数控制此行为的功能。
通过设置 teamcity.force.kill.process.on.cancel.build=false
,Teamcity 将首先发送一个 SIGTERM,然后在 [=19] 之后发送一个 SIGKILL =]60 秒(可通过 teamcity.force.kill.process.on.cancel.build.timeout.sec
覆盖)如果还活着
此工单中的更多详细信息:https://youtrack.jetbrains.com/issue/TW-13367#comment=27-1573848
我有一个运行带有内联 bash 脚本的 CMD 步骤的 TeamCity 作业。
如果用户取消作业或作业失败,我想通过 tcp 向另一个系统发送通知。
我在脚本中放入了一个陷阱处理程序,但陷阱没有触发,这表明它没有传递任何常用信号。
#!/usr/bin/env bash
function handle_error() {
echo "TRAPPED "
exit 1;
}
trap 'handle_error ERR' ERR
trap 'handle_error INT' INT
trap 'handle_error TERM' TERM
trap 'handle_error QUIT' QUIT
trap 'handle_error EXIT' EXIT
for i in $(seq 30); do echo $i; sleep 1; done
我在开始作业然后取消作业时得到以下输出。
[11:34:36][Step 1/1] Starting: /opt/teamcity_agent_a11/temp/agentTmp/custom_script4059331588446614618
[11:34:36][Step 1/1] in directory: /opt/teamcity_agent_a11/work/84217cc201b5cd23
[11:34:36][Step 1/1] 1
[11:34:37][Step 1/1] 2
[11:34:38][Step 1/1] 3
[11:34:39][Step 1/1] 4
[11:34:40][Step 1/1] 5
[11:34:43][Step 1/1] Process exited with code 137
[11:34:43][Step 1/1] Step Command Line interrupted
[11:34:44]Build was interrupted. Artifacts will not be published for this build
[11:34:44]Build canceled
TRAPPED 消息没有出现。有没有办法让这个工作?
或者,是否可以配置 TeamCity 以在该作业失败或被取消时触发另一个脚本?
--更新--
我现在发现,自 10.0.2 以来,TeamCity 提供了通过参数控制此行为的功能。
通过设置 teamcity.force.kill.process.on.cancel.build=false
,Teamcity 将首先发送一个 SIGTERM,然后在 之后发送一个 SIGKILL =]60 秒(可通过 teamcity.force.kill.process.on.cancel.build.timeout.sec
覆盖)如果还活着
此工单中的更多详细信息:https://youtrack.jetbrains.com/issue/TW-13367#comment=27-1573848
根据Exit Codes With Special Meanings的描述,退出代码137
表示进程被SIGKILL
杀死,
can not be caught, blocked or ignored
根据 docs(参见 12.1.2. Usage of signals with kill
部分)
我现在发现,自 10.0.2 以来,Teamcity 提供了通过参数控制此行为的功能。
通过设置 teamcity.force.kill.process.on.cancel.build=false
,Teamcity 将首先发送一个 SIGTERM,然后在 [=19] 之后发送一个 SIGKILL =]60 秒(可通过 teamcity.force.kill.process.on.cancel.build.timeout.sec
覆盖)如果还活着
此工单中的更多详细信息:https://youtrack.jetbrains.com/issue/TW-13367#comment=27-1573848