Gitea Action 构建通知指南(实战八)

📝 前言

这是 DevOps 专题的第十一篇,回顾一下前几篇的内容:

这一篇我们继续介绍如何使用 Gitea Actions 来配置构建结果通知(邮件)。

PS:这一篇过后我们 DevOps 专题系列就要暂告一段落了,下一个专题主要是围绕《云原生》展开。

云原生一个很大的专题系列,到时候也会涵盖部分 DevOps,如灰度、蓝绿发布等,同时不止是局限于Gitea Action,感兴趣的同学可以持续关注哈~

🧭 背景介绍

在持续集成过程中,构建完成通知是不可或缺的一环。它能让开发者第一时间获知任务是否执行成功,及时发现问题、节省沟通成本。

而 Gitea 自带的 Actions 功能(类似 GitHub Actions)也支持在构建流程中集成自定义通知机制。

PS:这期我们主要是介绍通过dawidd6/action-send-mail进行邮件通知。

🔍 使用场景

主要适用于以下场景:

  • 希望在构建成功或失败后,自动发送邮件给开发者、测试或运维人员。
  • 需要支持自定义邮件格式和内容,包括模板渲染、条件分支等。
  • 希望在构建失败时高亮提醒,以便快速响应问题。

📋 前提条件

开始之前,请确保满足以下条件:

🚀 详细步骤

1️⃣ 基础邮件发送配置

编写工作流文件,创建.gitea/workflows/build.yaml文件,内容参考如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 已隐藏部分配置,限于篇幅这里仅展示关键 action
jobs:
#.....省去拉取源码、构建部署等其他配置....
notify:
runs-on: host
needs: [build, deploy]
steps:
- name: Send mail
# 官方地址: dawidd6/action-send-mail@v6
uses: http://git.luhome.com/actions/dawidd6-action-send-mail@v6
with:
server_address: smtp.qiye.aliyun.com
server_port: 465
username: ${{ secrets.MAIL_USERNAME }}
password: ${{ secrets.MAIL_PASSWORD }}
subject: Gitea 构建通知
to: ${{ vars.EMAIL_TO }}
from: 青萍构建消息通知
body: project ${{ github.repository }} ${{ github.job }} 构建任务已完成,状态为:${{ job.status }}!

参数说明:

  • server_address: 邮箱服务器地址,这个就不用多说了,可根据你选择的邮箱服务商填写
  • server_port: 邮箱服务端口,465 默认为安全端口
  • username: 发送邮件的账号名,这里通过 secrets 安全引用,关于secrets如何使用可参看之前的一篇文章:《Gitea Action 远程部署指南(实战四)》
  • passowrd: 发送邮件的账号密码
  • subject: 发送邮件的主题
  • to: 发送给哪些邮件地址,这里通过 vars 变量进行引用,在下一步会介绍到如何创建变量。
  • from: 发件人的名称,可自定义如果不填就是显示发件人的邮箱地址。
  • body: 通知邮件发送的内容,这里只是简单的演示,在下面会介绍到通过模板发送的高级用法。

最终发送的只是很简单的文本内容,示例如下:

1
project lusyoe/python-workflow-demo  notify 构建任务已完成,状态为:success!

2️⃣ 创建 vars 变量

在上一步中我们介绍到了通过变量的方式**动态引用**接收邮件通知的人,这里我们再介绍下如何创建变量。

进入 gitea 项目 → 设置 → Actions → 变量 → 添加变量,如下图所示:

这里值填写接收人的邮箱地址,如果接收人是多个的话,可以通过**逗号,**分割。

3️⃣ 进阶版邮件模板发送

在上面基础用法中,我们只是简单的发送了一条通知内容,如果想要通知内容更丰富、更美观,就需要我们通过自定义的**html模板**来发送了,参考示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 已隐藏部分配置,限于篇幅这里仅展示关键 action
jobs:
#.....省去拉取源码、构建部署等其他配置....
notify:
runs-on: host
needs: [build, deploy]
steps:
# 生成构建通知邮件
- name: 生成构建通知邮件
env:
REPOSITORY: ${{ github.repository }}
BRANCH: ${{ github.ref_name }}
WORKFLOW: ${{ github.workflow }}
JOB: ${{ github.job }}
RUN_ID: ${{ github.run_number }}
SERVER_URL: ${{ github.server_url }}
STATUS: ${{ job.status }}
CREATED_AT: ${{ needs.build.outputs.datetime }}
COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
AUTHOR_NAME: ${{ github.event.head_commit.author.name }}
AUTHOR_EMAIL: ${{ github.event.head_commit.author.email }}
run: |
python3 email_generator.py

- name: Send mail
# 官方地址: dawidd6/action-send-mail@v6
uses: http://git.luhome.com/actions/dawidd6-action-send-mail@v6
with:
server_address: smtp.qiye.aliyun.com
server_port: 465
username: ${{ secrets.MAIL_USERNAME }}
password: ${{ secrets.MAIL_PASSWORD }}
subject: Gitea 构建通知
to: ${{ vars.EMAIL_TO }}
from: 青萍构建消息通知
html_body: file://generated_emails/success_scenario_email.html

配置说明:

  • 这里我们新加了一个生成构建通知邮件模板的步骤,并传递了一些构建过程中的内置环境变量。
  • 在发送时,我们将body,替换为了html_body,使其发送的是html而不再是简单的文本内容。

最终效果如下:

需要这个模板生成器的同学可以关注公众号:**青萍叙事**,发送消息: 构建通知,即可获取这套工具~

4️⃣ 终极版构建状态发送

在上一步进阶版中我们也只是将发送内容美化和丰富了一下,但不能每次都是发送构建成功的通知吧,构建失败怎么办呢,这里我们就再介绍下如何根据构建状态来动态发送不同的模板内容。

参考示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# 已隐藏部分配置,限于篇幅这里仅展示关键 action
jobs:
#.....省去拉取源码、构建部署等其他配置....
notify-success:
runs-on: host
if: success()
needs: [build, deploy]
steps:
# 生成构建通知邮件
- name: 生成构建通知邮件
env:
REPOSITORY: ${{ github.repository }}
BRANCH: ${{ github.ref_name }}
WORKFLOW: ${{ github.workflow }}
JOB: ${{ github.job }}
RUN_ID: ${{ github.run_number }}
SERVER_URL: ${{ github.server_url }}
STATUS: 'success'
CREATED_AT: ${{ needs.build.outputs.datetime }}
COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
AUTHOR_NAME: ${{ github.event.head_commit.author.name }}
AUTHOR_EMAIL: ${{ github.event.head_commit.author.email }}
run: |
python3 email_generator.py

- name: Send mail
# 官方地址: dawidd6/action-send-mail@v6
uses: http://git.luhome.com/actions/dawidd6-action-send-mail@v6
with:
server_address: smtp.qiye.aliyun.com
server_port: 465
secure: true
username: ${{ secrets.MAIL_USERNAME }}
password: ${{ secrets.MAIL_PASSWORD }}
subject: Gitea 构建通知
to: ${{ vars.EMAIL_TO }}
from: 青萍构建消息通知
html_body: file://generated_emails/success_scenario_email.html

notify-failure:
runs-on: host
if: failure()
needs: [build, deploy]
steps:
# 生成构建通知邮件
- name: 生成构建通知邮件
env:
REPOSITORY: ${{ github.repository }}
BRANCH: ${{ github.ref_name }}
WORKFLOW: ${{ github.workflow }}
JOB: ${{ github.job }}
RUN_ID: ${{ github.run_number }}
SERVER_URL: ${{ github.server_url }}
STATUS: 'failure'
CREATED_AT: ${{ needs.build.outputs.datetime }}
COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
AUTHOR_NAME: ${{ github.event.head_commit.author.name }}
AUTHOR_EMAIL: ${{ github.event.head_commit.author.email }}
run: |
python3 email_generator.py

- name: Send mail
# 官方地址: dawidd6/action-send-mail@v6
uses: http://git.luhome.com/actions/dawidd6-action-send-mail@v6
with:
server_address: smtp.qiye.aliyun.com
server_port: 465
secure: true
username: ${{ secrets.MAIL_USERNAME }}
password: ${{ secrets.MAIL_PASSWORD }}
subject: Gitea 构建通知
to: ${{ vars.EMAIL_TO }}
from: 青萍构建消息通知
html_body: file://generated_emails/failure_scenario_email.html

配置说明:

  • 这里我们配置了2个不同的 Job,并根据if:条件进行判断,如果成功则执行notify-success失败执行notify-failure
  • 在不同的 Job 中,我们发送的模板文件也是不一样的,成功时发送的是success_scenario_email.html、失败发送failure_scenario_email.html

如果构建失败,会自动发送失败邮件,内容参考如下:

至此我们的构建邮件通知基本已经配置完成了,可用于生产使用~

✅ 总结

最后总结一下,通过本文介绍,您应该学会了:

  • 如何通过 Gitea Actions 构建后发送邮件通知。
  • 如何创建配置并引用 Action 变量。
  • 如何发送文本及 html 高级通知邮件。
  • 如何根据构建成功/失败动态发送不同邮件。

邮件虽然传统,但依旧是 DevOps 自动化中不可替代的一环,尤其适合需要流程可追溯、记录完备的团队环境。

当然您也可以拓展改用钉钉、飞书或企业微信进行通知,这就不在本文的介绍范围内了。