bitbucket管道:只在PR创建时运行管道,而不是在PR更新时运行管道



Bitbucket允许启动PR:的管道


pipelines:
pull-requests:
"**":
- step:
script:
- echo "First step"

这个管道运行在公关创建和更新上。每次向分支机构推送此PR都会重新运行。

有没有办法只在公关创作上运行管道,而不在更新上运行管道?

我有点迟到了,但希望这能帮助到别人。我会试试这样的东西:

pipelines:
pull-requests:
"**":
- step:
name: 'Run Once'
caches:
- hasrun
script:
- ./pr-cache.sh
branches:
main:
- step:
name: 'Clear Cache'
caches:
- hasrun
script:
- rm prs/*
definitions:
caches:
hasrun: prs/

诀窍在于使用缓存。这里,pr-cache.sh只是检查具有PR id的文件是否已经存在。如果真的发生了,什么也不会发生。否则,它将创建文件并执行某些操作。

#!/bin/bash
mkdir prs 2>/dev/null
if [[ -f prs/$BITBUCKET_PR_ID.txt ]]; then
echo "Not doing a thing" # PR pipeline has already been run once.
else
echo $BITBUCKET_PR_ID > prs/$BITBUCKET_PR_ID.txt
echo "Doing a thing" # PR pipeline has not been run yet
fi

由于prs文件夹已缓存,因此pr文件将可用于下一次构建。

这并不完美。目前还无法知道哪个PR触发了branches步骤中的构建,因此从缓存中清除该PR的唯一方法是删除整个文件夹。存在一个开放特性请求,以使$BITBUCKET_PR_ID可用于所有管道步骤,而不仅仅是pull-requests

一旦该功能可用,我将用rm prs/$BITBUCKET_PR_ID.txt替换rm prs/*行。

在此之前,此解决方案将在合并任何PR时清除所有PR的缓存。这意味着它应该大大减少重播次数。如果你的公关创作非常同步,这可能正是你所需要的。

我很晚才回复,但根据更新的文档:

如果您想要推送提交并跳过触发其管道,您可以将[skip ci][ci skip]添加到提交消息中。

进一步阅读:https://support.atlassian.com/bitbucket-cloud/docs/pipeline-start-conditions/#Pull-请求

最新更新