gpt4 book ai didi

queue - 禁用 TeamCity 构建队列

转载 作者:行者123 更新时间:2023-12-04 15:59:47 25 4
gpt4 key购买 nike

是否可以禁用 TeamCity 中构建的排队?如果作业已经在运行,我不希望另一个作业排队(例如,如果由触发器启动)。我已经做了一些搜索,但没有看到防止排队的方法。

最佳答案

如果每个只有一个构建配置,您可以在同一个代理上运行它们,这样只有一个可以同时运行。但是,构建 2 将在构建 1 完成后运行,这是您不想要的。

这是我解决这个问题的方法。这有点难看,但很简单,并且可以推广到许多构建配置:

选择一个特定的服务器。由于此服务器将确定构建是否运行,因此我们将其称为您的网关服务器。我们需要一个现在不存在的文件位置,也不会被任何其他程序创建。比如说,`/teamcity/.lock'

使用以下内容进行构建配置:

lockFileLocation="/teamcity/.lock"
if [ -f $lockFileLocation ];
then
echo "oops, we're already running a build."
exit 1
else
echo "No build is running. Let's lock it up!"
touch $lockFileLocation
fi

对于 Powershell,它是这样的:
$lockFileLocation = "C:\teamcity\lock"
if(Test-Path $lockFileLocation)
{
echo "oops, we're already running a build."
exit 1
}
else
{
echo "No build is running. Let's lock it up!"
echo "lock'd!" > $lockFileLocation
}

并确保build设置为仅在门代理上运行。所以这个构建只有在它从未运行过的情况下才会成功。还没有用。我们称之为构建锁。使用以下内容进行新的构建配置:
lockFileLocation="/teamcity/.lock"
if [ -f $lockFileLocation ];
then
echo "Build's over. You don't have to do home, but you can't stay here"
rm $lockFileLocation
else
echo "No build is running. How did we get here?"
exit 1
fi

对于 Powershell:
$lockFileLocation = "C:\teamcity\lock"
if(Test-Path $lockFileLocation)
{
echo "Build's over. You don't have to do home, but you can't stay here"
rm "$lockFileLocation"
}
else
{
echo "No build is running. How did we get here?"
exit 1
}

确保将build设置为仅在门上运行,并且该构建将删除该文件(如果存在)。让我们调用构建解锁。

酷,现在我们可以运行 lock 来写入文件,和 unlock 来删除它。如果你运行 lock 两次而没有运行 unlock,那么第一次运行 lock 会通过,第二次会失败。好的。

但这对我们有什么帮助呢?假设您的构建是一个名为 work 的单一构建配置。在工作上设置完成构建触发器,以便它在锁定成功后运行。同样,在解锁时设置完成构建触发器,使其在工作完成后运行, 无论通过还是失败 .即使您提交了错误代码,我们也希望解锁构建。

如果您的构建是一组构建配置,则您的构建内部需要通过快照依赖项进行连接,而不是完成构建触发器。假设您的构建是两个构建配置:work-A 和 work-B。您想先运行工作-A,然后在完成后运行工作-B。像往常一样设置从 work-B 到 work-A 的快照依赖项。然后,在解锁时设置完成构建触发器,在锁定通过时触发。将一个快照依赖从unlock设置为work-B,设置为“run build even if dependency has failed。这是构建图,向下箭头是完成构建触发器,向上箭头是快照依赖:
+----+                           
|lock|
+----+ +------+
| |work-A|
| +------+
| ^
| |
| |
\ +------+
\ |work-B|
\ +------+
\ ^
\ |
v |
+------+
|unlock|
+------+

现在,当您点击“运行”锁定时,它将锁定构建,触发您的构建配置,然后解锁构建。多次点击“运行”,看看工作 A 和工作 B 是如何排队的。

但这只是一组构建配置。你有两个。因此,以这种方式设置它们,确保它们查看相同的文件,并且都设置为仅在门代理上运行。

好极了!我们完成了!但是等等,为什么 work-A 和 work-B 需要通过快照依赖连接?好吧,假设构建如下:
+----+
|lock|
+----+
|
|
v
+------+
|work-A|
+------+
|
|
v
+------+
|work-B|
+------+
|
|
v
+------+
|unlock|
+------+

现在,如果工作 A 失败了怎么办? work-B 不会运行,因此也不会解锁。

注意:理论上,您可以按如下方式运行构建:
+----+        
|lock|
+----+ +------+
\ |work-A|
\ +------+
\ ^
\ |
v |
+------+
|work-B|
+------+
|
|
v
+------+
|unlock|
+------+

这应该有效,但我还没有测试过,所以我不能给你所有的设置。

关于queue - 禁用 TeamCity 构建队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13980006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com