如何在删除 Gitlab 上的特定分支时自动删除 JFrog 中的工件?
How to delete artifacts automatically in JFrog while deleting specific branch on Gitlab?
我需要将 JFrog 与 Gitlab 集成。我的主要目标是在删除特定分支后自动删除 JFrog 中的所有工件。我读过 webhooks,但我不确定如何有效地使用它们。此类问题的最佳解决方案是什么?
您可以使用 JFrog CLI:
删除 Artifactory 工件
jfrog rt del --quiet --recursive "my-repo/path/to/branch/artifacts"
在 GitLab 中删除分支时有几种方法可以触发此命令:
- 当您 stop a GitLab environment
时触发 on_stop_action
- 在删除分支时配置 GitLab webhook
GitLab 停止环境
- 您创建的每个分支都将分配一个唯一的 GitLab 环境。
- 删除分支后,相应的GitLab环境会自动停止
- 这将触发
on_stop_action
,进而触发管道作业以调用 JFrog CLI。
- 您也可以在 GitLab web UI 或使用 GitLab API 中手动停止环境。如果您不想在这些情况下删除工件,请将
rules
添加到停止作业。
- 有关详细信息,请参阅 Stop an environment when a branch is deleted。
gitlab-ci.yml
作业看起来像这样(假设 JFrog CLI 已经安装在你的 GitLab runner 镜像中):
deploy_artifacts:
stage: deploy
script:
- echo "Deploy artifacts to JFrog Artifactory"
environment:
name: project/$CI_COMMIT_REF_SLUG
url: <optionally enter artifact URL here>
on_stop: delete_artifacts
rules:
- if: $CI_MERGE_REQUEST_ID
delete_artifacts:
stage: deploy
script:
- jfrog rt del --quiet --recursive "my-repo/path/to/branch/artifacts"
environment:
name: project/$CI_COMMIT_REF_SLUG
action: stop
rules:
- if: $CI_MERGE_REQUEST_ID
when: manual
If you can’t use pipelines for merge requests, set the GIT_STRATEGY to none in the delete_artifacts job. Then the runner doesn’t try to check out the code after the branch is deleted.
GitLab 网络钩子
- GitLab 可以在某些事件发生时使用 POST 请求调用 webhook URL
- 要在删除分支时触发 GitLab webhook 事件,请使用 basic push event
- 推送事件POST请求中的某些字段对于删除分支是唯一的。有关详细信息,请参阅此 GitLab issue。
- 您需要设置一个 webhook receiver 来处理 webhook POST 请求
如果您之前没有设置自定义 webhook,它可能会有点复杂。在那种情况下,我建议改用 GitLab 环境。
我需要将 JFrog 与 Gitlab 集成。我的主要目标是在删除特定分支后自动删除 JFrog 中的所有工件。我读过 webhooks,但我不确定如何有效地使用它们。此类问题的最佳解决方案是什么?
您可以使用 JFrog CLI:
删除 Artifactory 工件jfrog rt del --quiet --recursive "my-repo/path/to/branch/artifacts"
在 GitLab 中删除分支时有几种方法可以触发此命令:
- 当您 stop a GitLab environment 时触发
- 在删除分支时配置 GitLab webhook
on_stop_action
GitLab 停止环境
- 您创建的每个分支都将分配一个唯一的 GitLab 环境。
- 删除分支后,相应的GitLab环境会自动停止
- 这将触发
on_stop_action
,进而触发管道作业以调用 JFrog CLI。 - 您也可以在 GitLab web UI 或使用 GitLab API 中手动停止环境。如果您不想在这些情况下删除工件,请将
rules
添加到停止作业。 - 有关详细信息,请参阅 Stop an environment when a branch is deleted。
gitlab-ci.yml
作业看起来像这样(假设 JFrog CLI 已经安装在你的 GitLab runner 镜像中):
deploy_artifacts:
stage: deploy
script:
- echo "Deploy artifacts to JFrog Artifactory"
environment:
name: project/$CI_COMMIT_REF_SLUG
url: <optionally enter artifact URL here>
on_stop: delete_artifacts
rules:
- if: $CI_MERGE_REQUEST_ID
delete_artifacts:
stage: deploy
script:
- jfrog rt del --quiet --recursive "my-repo/path/to/branch/artifacts"
environment:
name: project/$CI_COMMIT_REF_SLUG
action: stop
rules:
- if: $CI_MERGE_REQUEST_ID
when: manual
If you can’t use pipelines for merge requests, set the GIT_STRATEGY to none in the delete_artifacts job. Then the runner doesn’t try to check out the code after the branch is deleted.
GitLab 网络钩子
- GitLab 可以在某些事件发生时使用 POST 请求调用 webhook URL
- 要在删除分支时触发 GitLab webhook 事件,请使用 basic push event
- 推送事件POST请求中的某些字段对于删除分支是唯一的。有关详细信息,请参阅此 GitLab issue。
- 您需要设置一个 webhook receiver 来处理 webhook POST 请求
如果您之前没有设置自定义 webhook,它可能会有点复杂。在那种情况下,我建议改用 GitLab 环境。