RayGroup Inc

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1213 | 回复: 6

关于运用GitHub Actions 集成,并定时发送天气邮件的探讨

[复制链接]

3

主题

14

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2020-2-10 20:38:25 | 显示全部楼层 |阅读模式
本帖最后由 RuanYiFeng 于 2020-2-10 20:52 编辑

关于运用GitHub Actions 集成,并定时发送天气邮件的探讨

职业-关于运用GitHub Actions 集成,并定时发送天气邮件的探讨(1)



GitHub Actions 是一个 CI/CD(持续集成/持续部署)工具,但也可用作代码运行环境。功能非常强大,能够玩出许多花样。

我之前写的《GitHub Actions 入门教程》 已经介绍了它的基本用法。本文紧接前一篇教程,给出一个简单实用的例子:每天定时运行一次脚本,获取天气预报,然后发送电子邮件。


完整代码可以从 GitHub 仓库 ruanyf/weather-action 获取。




回复

使用道具 举报

3

主题

14

帖子

82

积分

注册会员

Rank: 2

积分
82
 楼主| 发表于 2020-2-10 20:47:41 | 显示全部楼层
本帖最后由 RuanYiFeng 于 2020-2-10 23:03 编辑

第一步:获取天气预报

网站 wttr.in 支持命令行请求天气预报。


<font color="black">$ curl wttr.in</font><font color="black">
</font>

上面的命令会返回,你的 IP 地址所在位置的天气。

职业-关于运用GitHub Actions 集成,并定时发送天气邮件的探讨(2)

它还允许 URL 里面指定城市。

$ curl wttr.in/Beijing

返回的数据可以通过curl命令的-o参数,保存成文件,以便后面发送。

$ curl -o result.html wttr.in/Beijing

wttr. in 允许定制天气预报的格式和内容,详见它的文档,这里就不展开了。最后封装好的脚本weather.sh,完整代码看这里


回复

使用道具 举报

3

主题

14

帖子

82

积分

注册会员

Rank: 2

积分
82
 楼主| 发表于 2020-2-10 23:03:04 | 显示全部楼层
第二步:发送邮件

拿到天气预报以后,只要放在邮件里面,发出去就可以了。

我用的是网易 163 邮件的免费发送服务,需要在它的网站上开通,本地的配置请看下一步。



回复

使用道具 举报

3

主题

14

帖子

82

积分

注册会员

Rank: 2

积分
82
 楼主| 发表于 2020-2-10 23:09:09 | 显示全部楼层
本帖最后由 RuanYiFeng 于 2020-2-10 23:14 编辑

第三步:配置 GitHub Actions

触发 GitHub Actions 需要在项目仓库新建一个.github/workflows子目录,里面是 YAML 格式配置文件,文件名可以随便取。GitHub 只要发现配置文件,就会运行 Actions。

配置文件的第一部分是触发条件。


name: 'GitHub Actions Weather Bot'

on:
  push:
  schedule:
    - cron: '0 21 * * *'

上面代码中,name字段是配置文件的描述,on字段是触发条件。我们指定两种情况下触发,第一种是代码 Push 进仓库,第二种是定时任务,每天在国际标准时间21点(北京时间早上5点)运行。

接着,就是运行流程。


runs-on: ubuntu-latest
steps:
  - name: 'Checkout codes'
    uses: actions/checkout@v1

上面代码中,运行环境指定为最新版的 Ubuntu。流程的第一步是从代码仓库获取代码。

拿到代码以后,就可以获取天气预报了。


- name: 'Get weather report'
  run: bash ./weather.sh

上面代码中,run字段就是所要运行的命令。

最后,发送邮件。




回复

使用道具 举报

3

主题

14

帖子

82

积分

注册会员

Rank: 2

积分
82
 楼主| 发表于 2020-2-10 23:12:42 | 显示全部楼层
最后,发送邮件。

- name: 'Send mail'
  uses: dawidd6/action-send-mail@master
  with:
    serveraddress: smtp.163.com
    serverport: 465
    username: ${{ secrets.MAILUSERNAME }}
    password: ${{ secrets.MAILPASSWORD }}
    subject: Shanghai Weather Report
    body: file://result.html
    to: yifeng.ruan@gmail.com
    from: GitHub Actions
    content_type: text/html

上面代码中,发送邮件使用的是一个已经写好的 action,只要配几个参数就可以用。参数之中,邮件 SMTP 服务器的用户名和密码,使用的是加密变量,需要在项目的settings/secrets菜单里面设置。

完整的配置文件看这里。更具体的语法解释可以参考《GitHub Actions 入门教程》

写好配置,推送到仓库以后,就可以每天清早收到一封天气预报邮件了。在这个基础上不难扩展,可以定时执行各种脚本(比如每5分钟检查一次某个网站是否在线),然后将结果发到指定的渠道,这里就有一个发到社交媒体 Telegram 的例子




回复

使用道具 举报

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
发表于 2020-2-10 23:45:53 | 显示全部楼层
因为某种原因,没有太多精力管理论坛,看到这样优秀的系列文章,颇有意外。


文章分析很到位,但我有一个问题想提出来,

本人前不久将本站admin@rainafter.cn的域名邮箱配置服务(其中包含着明文的IMAP的用户名和密码)交给了同学打理,结果这位同学开玩笑一样的就把密码更改了{:7_200:}(当然,这只是一个恶作剧,并且及时的提醒我要注意加密)

正因为我这样的经历,在我看到这样的代码之后

 username: ${{ secrets.MAILUSERNAME }}
password: ${{ secrets.MAILPASSWORD }}

我不禁在想,这样的问题岂不是和我的一样吗?在公布到仓库的过程中岂不是要公布出密码??
请问有没有有效的方法能够避免显示出明文的密码?职业-关于运用GitHub Actions 集成,并定时发送天气邮件的探讨(3)

为灵感而生,让创作自如。
回复

使用道具 举报

3

主题

14

帖子

82

积分

注册会员

Rank: 2

积分
82
 楼主| 发表于 2020-2-12 17:52:03 | 显示全部楼层
IceTeacher 发表于 2020-2-10 23:45
因为某种原因,没有太多精力管理论坛,看到这样优秀的系列文章,颇有意外。

你的这个问题可以采用隐藏密码来解决


至于隐藏stmp的密码


建议使用GitHub的Secrets


在设置里面可以找到Secrets这个选项

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 14:10 Processed in 0.057147 second(s), 23 queries .

© 2024 RayGroup Inc Powered by Discuz! X3.4 Theme by Jvmao 豫ICP备19036546号

快速回复 返回顶部 返回列表