我正在使用 gitlab web hook 来发布内容完整的更改,对于每个更改都会触发管道, 很多管道运行并浪费资源,我正在寻找一种解决方案来取消不需要的管道
我在 gitlab 上找不到选项,所以我制作了自己的脚本:
check_redundancy:
stage: check_redundancy
image: public.ecr.aws/amazonlinux/amazonlinux:2
before_script:
- yum update -y
- yum install -y unzip jq curl
script:
- >
if true; then
echo "Another pipeline is still running. Blocking older pipelines."
echo $CI_API_V4_URL
echo $CI_COMMIT_REF_NAME
echo $CI_PROJECT_ID
echo $CI_PIPELINE_IID
CURRENT_PIPELINE_ID=$(($CI_PIPELINE_ID))
PIPELINES=$(curl --header "PRIVATE-TOKEN: $CI_JOB_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/pipelines?ref=$CI_COMMIT_REF_NAME&status=running" | jq -r '.[].id // empty')
echo $PIPELINES
if [[ -n "$PIPELINES" ]]; then
IFS=$'\n'
for PIPELINE_ID in $(echo "$PIPELINES" | tac); do
PIPELINE_IDD=$(($PIPELINE_ID))
if [ "$PIPELINE_IDD" -lt "$CURRENT_PIPELINE_ID" ]; then
echo "Cancelling pipeline with ID: $PIPELINE_ID"
curl --request POST --header "PRIVATE-TOKEN: $CI_JOB_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/pipelines/$PIPELINE_ID/cancel" &
fi
done
wait
else
echo "No previous running pipelines found."
fi
fi
rules:
- when: always
问题是有点慢,有没有更好的解决方案或更好的速度增强
您可以使用自动取消冗余管道设置
您可以将待处理或正在运行的管道设置为当新更改的管道在同一分支上运行时自动取消。您可以在项目设置中启用此功能:
在左侧边栏的顶部,选择 Search GitLab 来查找您的项目。
- 选择设置 > CI/CD。
- 扩展通用管道。
- 选择自动取消冗余管道复选框。
- 选择保存更改。