如何取消重复的gitlab管道并只保留las管道?

问题描述 投票:0回答:2

我正在使用 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

问题是有点慢,有没有更好的解决方案或更好的速度增强

bash gitlab gitlab-ci gitlab-api
2个回答
0
投票

您可以使用自动取消冗余管道设置

您可以将待处理或正在运行的管道设置为当新更改的管道在同一分支上运行时自动取消。您可以在项目设置中启用此功能:

在左侧边栏的顶部,选择 Search GitLab 来查找您的项目。

  1. 选择设置 > CI/CD
  2. 扩展通用管道
  3. 选择自动取消冗余管道复选框。
  4. 选择保存更改

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.