我们能否检测到是什么事件触发了合并请求范围内的管道?
是的,这包含在预定义的
CI_PIPELINE_SOURCE
变量,如
frakman1 answered
.
我需要WebHook访问这个信息吗?
这取决于你想做什么。如上所述,该信息作为预定义变量在管道中固有地可用。然而,应该注意的是,只有某些事件会触发
merge request pipelines
完全
例如,合并请求上的注释不会触发管道。如果你想对评论或状态变化做出反应,你可能需要一个webhook。
管道源信息在webhooks和
list pipelines API
在
source
Webhooks在
X-Gitlab-Event
标题和
payload
有关活动的信息。
还有另一种方法来做我的团队正在努力做的事情吗?
Webhook可能比依赖管道内作业更可靠,因为Webhook可以捕获比作业/管道更多的事件。例如,Webhooks可以在根本没有创建管道的情况下向您发送通知。如果您的管道因某种原因被阻塞/超时,它也会起作用。
然而,缺点是您需要开发和托管自己的web应用程序来处理传入的Webhook。
有很多
project integrations
内置于GitLab中,用于直接向各种服务发送通知Webhook。不幸的是,莱弗不是其中之一。
如果你想从乔布斯那里发送通知,我发现
apprise
大大简化了这一过程
supports ryver
.
基本模板作业可能如下所示:
.send_notification:
image: python:3.9-slim
before_script:
- pip install apprise
variables:
RYVER_ORG: "YourOrganization"
# Define RIVER_TOKEN in your CI/CD variables settings
NOTIFICATION_TITLE: "Placeholder Title"
NOTIFICATION_BODY: "Placehodler Body"
script:
- apprise -vv -t "${NOTIFICATION_TITLE}" -b "${NOTIFICATION_BODY}" "ryver:///${RYVER_ORG}/${RYVER_TOKEN}"
将工作与
when: on_failure
或
when: on_success
可能很有用:
stages:
- build
- build_notification
build:
stage: build
script:
- make build
notify_build_failure:
stage: build_notification
when: on_failure
extends: .send_notification
variables:
NOTIFICATION_TITLE: "Failed - $CI_PROJECT_NAME pipeline $CI_PIPELINE_ID"
NOTIFICATION_BODY: "The build failed for the pipeline. See $CI_PIPELINE_URL"
notify_build_success:
stage: build_notification
when: on_success # the default
extends: .send_notification
variables:
NOTIFICATION_TITLE: "Build Success - $CI_PROJECT_NAME pipeline $CI_PIPELINE_ID"
NOTIFICATION_BODY: "The build has succeeded. See $CI_PIPELINE_URL"
或者使用默认值
after_script
即使作业失败也会运行。这是一个简单的方法,让你的
ryver.sh
脚本在每次作业后进行评估。脚本逻辑可以确定是否发送通知以及通知的内容。
default:
after_script:
- ./ryver.sh