利用 Github Actions,实现每日爬取 bing 壁纸
小项目
每日爬取 bing 壁纸 利用 Github Actions,每日爬取 bing 壁纸,存储到 wallpapers 文件夹。
运行方式 每天固定时间运行,Cron表达式 (UTC时间)
感谢 @RashidaKAKU , 欢迎 关注
-
https://github.com/AiMoneyClub/BingWallpapers
actons执行结果
整个流程在master分支发生push事件时触发。
只有一个job,运行在虚拟机环境ubuntu-latest。
第一步是获取源码,使用的 action 是actions/checkout。
第二步是构建和部署,使用的 action 是JamesIves/github-pages-deploy-action。
第二步需要四个环境变量,分别为 GitHub 密钥、发布分支、构建成果所在目录、构建脚本。
其中,只有 GitHub 密钥是秘密变量,需要写在双括号里面,其他三个都可以直接写在文件里。
框架拆解
一、GitHub Actions 是什么?
GitHub Actions 是 GitHub 的持续集成服务,于2018年10月推出。
这些天,我一直在试用,觉得它非常强大,有创意,比 Travis CI 玩法更多
大家知道,持续集成由很多操作组成,比如抓取代码、运行测试、登录远程服务器,发布到第三方服务等等。GitHub 把这些操作就称为 actions。
很多操作在不同项目里面是类似的,完全可以共享。GitHub 注意到了这一点,想出了一个很妙的点子,允许开发者把每个操作写成独立的脚本文件,存放到代码仓库,使得其他开发者可以引用。
事实上,GitHub 官方的 actions 都放在 github.com/actions 里面。
❝解决了什么问题?
❞
CI/CD 平台(流水线引擎)发展历史中大概有 3 波浪潮
第一波浪潮以 Jenkins 为代表,让大家广泛的接受了持续集成和持续交付的概念,解决了自动编译、测试、部署代码的问题
第二波浪潮以 GitLab CI 为代表,以代码仓库为入口,设计理念是流水线即代码,开箱即用,使用体验极好,好比大家从 Eclipse 切换到 IntelliJ IDEA,解决了流水线的管理问题
第三波浪潮以 GitHub Actions 为代表,设计理念是将可复用的能完成复杂但是高频任务的脚本封装为原子(Actions),原子和编程语言的函数一样,有入参、出参。解决了流水线里脚本复用难的问题
GitHub 发现了很多流水线里任务是类似的,可以共享出来,故提出了原子的概念,支持使用 JavaScript、yml、Docker 镜像等方式开发原子,提倡通过 GitHub Marketplace(市场)分发原子,降低了大家使用流水线的成本,
最终带来了 GitHub Actions 生态的繁荣,目前 GitHub 市场里有 1.7 万个原子,涉及开发工作流的方方面面,这是世界上最大的流水线生态
基本概念
❝旁边 :不用担心 github 服务器不够用,浪费他们资源,其实他们借助容器技术,背后n台一个普通的服务器。放心使用就行,他们隔离了,你怎么使用也不会导致他们崩溃。
❞
GitHub Actions 有一些自己的术语。
(1)workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。
(2)job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
(3)step(步骤):每个 job 由多个 step 构成,一步步完成。
(4)action (动作):每个 step 可以依次执行一个或多个命令(action)
YAML file
-
https://github.com/AiMoneyClub/BingWallpapers/blob/main/.github/workflows/bing_wallpaper.yml
on:
schedule:
- cron: '0 7 * * *' # 每天下午3点运行 (北京时间)
push:
paths:
- '.github/**' # 监听 .github 文件夹的修改
workflow_dispatch: # 添加 workflow_dispatch 触发器,手动触发工作流程
设置触发事件 on To automatically trigger a workflow, use on to define which events can cause the workflow to run
-
schedule 定时执行
-
workflow_dispatch
To enable a workflow to be triggered manually, you need to configure the workflow_dispatch event
job
-
runs-on字段指定运行所需要的虚拟机环境。它是必填字段。目前可用的虚拟机如下
ubuntu-latest,ubuntu-18.04或ubuntu-16.04
windows-latest,windows-2019或windows-2016 macOS-latest或macOS-10.14
-
actions/checkout@v2是一个由GitHub官方提供的Action,
它的作用是将代码仓库中的代码检出到Action运行的环境中, 以便于进行后续的操作,例如编译、测试、部署等。
例如,可以使用以下代码来检出一个名为my-repo的代码仓库中的main分支:
- name: Checkout code
uses: actions/checkout@v2
with:
repository: my-repo
ref: main
总的来说,actions/checkout@v2是一个非常方便实用的Action,可以帮助开发者在GitHub Actions中更加便捷地进行自动化流程的构建和管理。
-
run:安装软件
该步骤运行的命令或者 action
teps字段指定每个 Job 的运行步骤,可以包含一个或多个步骤。每个步骤都可以指定以下三个字段。
jobs.<job_id>.steps.name:步骤名称。 jobs.<job_id>.steps.run:该步骤运行的命令或者 action。 jobs.<job_id>.steps.env:该步骤所需的环境变量。
-
run 运行shell命令写入环境变量
echo "MONTH= GITHUB_ENV
创建目录 mkdir -p "wallpapers/ {{ env.MONTH }}"
-
wget是一个下载文件的工具
-o, –output-file=FILE 把记录写到FILE文件中
-q, –quiet 安静模式(没有输出)
-
Sending POST Request with Curl
curl -X POST https://reqbin.com/echo/post/json
-H "Content-Type: application/json"
-d '{"Id": 79, "status": 3}'
-d, --data
-H, --header
-s:不输出错误和进度信息
-L:会让 HTTP 请求跟随服务器的重定向。curl 默认不跟随重定向。
小结:
❝:不用担心 github 服务器不够用,浪费他们资源,其实他们借助容器技术,背后n台一个普通的服务器。放心使用就行,他们隔离了,你怎么使用也不会导致他们崩溃 ,并执行速度很快
❞
help
-
GitHub Actions 入门教程 https://docs.github.com/zh/actions/learn-github-actions/understanding-github-actions
-
GitHub Actions 快速入门 https://docs.github.com/zh/actions/quickstart
-
Workflow syntax for GitHub Actions https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions
-
如何手工触发 https://docs.github.com/en/actions/using-workflows/manually-running-a-workflow
-
Linux 命令 curl 的用法及参数解析 https://www.cnblogs.com/zhuminghui/p/14807465.html
-
重定向与转发
-
bing-wallpaper-github-action
-
How do I get the output of a specific step in GitHub Actions?
功能拆解:
如何 拼接 url
https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&nc=1614319565639&pid=hp&FORM=BEHPTB&uhd=1&uhdwidth=3840&uhdheight=2160
检查是否掌握
一、这个技术出现的背景、初衷和要达到什么样的目标或是要解决什么样的问题
二、这个技术的优势和劣势分别是什么
三、这个技术适用的场景。任何技术都有其适用的场景,离开了这个场景
四、技术的组成部分和关键点。
五、技术的底层原理和关键实现
六、已有的实现和它之间的对比
https://github.com/LF112/gotAction https://github.com/marketplace/actions/aliyun-signin
https://juejin.cn/post/6885552654479523854
本文由 mdnice 多平台发布