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

Posted

技术标签:

【中文标题】如何从 GitLab 管道向 Telegram 发送通知?【英文标题】:How to send notification to Telegram from GitLab pipeline? 【发布时间】:2022-01-24 02:01:37 【问题描述】:

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

所以问题 - 这可能吗?如果可以,怎么做?

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

【问题讨论】:

【参考方案1】:

所以,我们会一步一步来:

    创建 Telegram 机器人 将机器人添加到电报组 找出 Telegram 组 ID 通过 GitLab 管道发送消息

1。创建一个电报机器人

Telegram 本身对此有足够好的指导:

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

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

2。将机器人添加到电报组

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

3。找出 Telegram 群组 ID

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

在响应中查找聊天 ID: ... "chat": "id": <YourGroupID>, ...

查看详情:Telegram Bot - how to get a group chat id?

4。通过 GitLab 管道发送消息

使用 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

记得调整YourBOTTokenYourGroupID,以及消息的文本。

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

【讨论】:

【参考方案2】:

发送通知(尤其是在您使用多种服务或聊天时)的一种简单方法是使用apprise。

发送到一个电报频道:

apprise -vv --body="Notify telegram chat" \
  tgram://bottoken/ChatID1 \

这使得一次性通知来自管道的多个服务变得容易,而无需针对每个服务的 API 编写代码(apprise 会为您处理)。

image: python:3.9-slim # or :3.9-alpine if you prefer a smaller image
before_script:
  - pip install apprise # consider caching PIP_CACHE_DIR for performance
script: | 
  # Set a notification to multiple telegram chats, a yahoo email account, 
  # Slack, and a Kodi Server with a bit of added verbosity:
  apprise -vv --body="Notify more than one service" \
    tgram://bottoken/ChatID1/ChatID2/ChatIDN \
    mailto://user:password@yahoo.com \
    slack://token_a/token_b/token_c \
    kodi://example.com

【讨论】:

以上是关于如何从 GitLab 管道向 Telegram 发送通知?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 gitlab CI 管道中推送到仓库?

Gitlab:推送向 repo 注册,但管道未运行且项目 dashbaord 'last updated' 未更改

如何从 GitLab CI 管道的工作发送电子邮件?

text 从机器人向Telegram用户发送消息

剪切新版本时如何触发 GitLab CI/CD 管道?

如何在 GitLab CI 的管道中将变量的值从一个作业传递到下一个作业?