GitLab CI запускает конвейер, когда ветка / тег удаляются - PullRequest
0 голосов
/ 14 июня 2019

У меня есть Git-репо. GitLab CI настроен для развертывания артефактов в несвязанной ветви 'artifacts / $ BRANCH'.

(Возможно, это не лучший способ хранения артефактов, но он достаточно удобен для целей этого проекта)

Я хочу определить момент, когда BRANCH удален (объединен и удален), а затем запустить задание CI для удаления соответствующего artifacts/$BRANCH. Я искал решение в документах, нашел ключевые слова only / except, но ничего подходящего не было.

На данный момент у меня есть единственная идея - запускать работу по очистке с каждым конвейером и / или по расписанию. Действительно классным решением было бы «запускать конвейер при удалении ветви». Это возможно?

1 Ответ

0 голосов
/ 14 июня 2019

Идея обхода была реализована:

before_script:
- function DEBUG { >&2 "$@" || true; }

remove_stale_artifacts:
  stage: deploy
  dependencies:
  image: alpine
  variables:
    GIT_CHECKOUT: "false"
    GIT_SUBMODULE_STRATEGY: none
  script:
  - apk add --no-cache git perl openssh-client
  - mkdir /temp  &&  mount -t tmpfs -o size=50m tmpfs /temp
  ## --- FIND STALED ARTIFACTS BRANCHES ---
  - git branch -r  --list origin/artifacts/\* | grep -v HEAD | sed -e s#origin/##g -Ee s#^\\s+##g >/temp/ARTIFACTS_BRANCHES
  - DEBUG cat /temp/ARTIFACTS_BRANCHES
  - git branch -r  --list origin/\*           | grep -v -e HEAD -e artifacts/| sed -e s#origin/##g -Ee s#^\\s+#artifacts/#g >/temp/BRANCHES
  - DEBUG cat /temp/BRANCHES
  - fgrep -vf /temp/BRANCHES /temp/ARTIFACTS_BRANCHES >/temp/STALE_ARTIFACTS_BRANCHES || return 0
  - DEBUG cat /temp/STALE_ARTIFACTS_BRANCHES
  - PUSH_SPEC=$(sed -e 's#\s+##g' -e 's#^#:#g' /temp/STALE_ARTIFACTS_BRANCHES)
  - DEBUG echo "$PUSH_SPEC"
  ## --------- URL --------------
  - echo "$KI" >/tmp/ki  &&  chmod 400 /tmp/ki
  - export GIT_SSH_COMMAND="ssh -i/tmp/ki -oStrictHostKeyChecking=no"
  - SSH_URL=$(echo "$CI_REPOSITORY_URL" | perl -pe 's#https://(.+?):(.+?)@(.+?)/(.+?).git#git@\3:\4.git#' )
  - git push "$SSH_URL" $PUSH_SPEC

Где KI - переменная, которая содержит закрытый ключ SSH. Должен быть установлен в RepoSettings-> CI-> Variables. Открытый ключ должен быть добавлен к ключам развертывания, и доступ для записи должен быть разрешен.

...