如何从 GitLab 管道向 Telegram 发送通知?

Mar*_*ark 5 notifications gitlab telegram gitlab-ci

在我们的小型初创公司中,我们使用 GitLab 进行开发,使用 Telegram 进行开发人员和 PO 之间的内部通信。由于 PO 希望立即看到进度,因此我们设置了 GitLab Pipeline,以便在每次提交后将预览版本部署到 Web 服务器上。现在我们想扩大管道。因此,部署后会通过 Telegram 组发送通知。

所以问题是——这可能吗?如果可能的话,如何实现?

编辑:因为我已经实现了,所以这不是一个真正的问题。我想将答案发布在这里,以便其他人也可以使用它。

Mar*_*ark 14

因此,我们将逐步进行:

  1. 创建 Telegram 机器人
  2. 将机器人添加到 Telegram 群组
  3. 查找 Telegram 群组 ID
  4. 通过 GitLab Pipeline 发送消息

1. 创建 Telegram 机器人

Telegram 本身对此有足够好的说明:

https://core.telegram.org/bots#6-botfather

这些说明没有明确说明任何内容,但要生成它,您必须进入与 BotFather 的聊天。最后你会得到一个机器人令牌,比如110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw

2. 将机器人添加到 Telegram 组

切换到 Telegram 组,并将创建的机器人添加为成员(按名称查找机器人)。

3. 找出 Telegram 群组 ID

在浏览器中获取机器人的更新状态: https://api.telegram.org/bot<YourBOTToken>/getUpdates

在响应中找到 chat-id: ... "chat": {"id": <YourGroupID>, ...

有关更多详细信息,请参阅:Telegram Bot - 如何获取群聊 ID?

4.通过GitLab Pipeline发送消息

使用curl 命令发送消息。例如,可以为此目的扩展 gitlab 管道中的现有阶段:

upload:
  stage: deploy
  image: alpine:latest
  script:
    - 'apk --no-cache add curl'
    - 'curl -X POST -H "Content-Type: application/json" -d "{\"chat_id\": \"<YourGroupID>\", \"text\": \"CI: new version was uploaded, see: https://preview.startup.com\"}" https://api.telegram.org/bot<YourBOTToken>/sendMessage '
  only:
    - main
Run Code Online (Sandbox Code Playgroud)

请记住调整YourBOTTokenYourGroupID以及消息文本。

*)我们这里使用alpine docker镜像,所以必须安装curl - 'apk --no-cache add curl'。对于其他图像,这可能必须以不同的方式完成。