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-请求