利用 Github Actions,实现每日爬取 bing 壁纸

alt

利用 Github Actions,实现每日爬取 bing 壁纸

小项目

每日爬取 bing 壁纸 利用 Github Actions,每日爬取 bing 壁纸,存储到 wallpapers 文件夹。

运行方式 每天固定时间运行,Cron表达式 (UTC时间)

感谢 @RashidaKAKU , 欢迎 关注

  • https://github.com/AiMoneyClub/BingWallpapers

actons执行结果

alt
整个流程在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 里面。

解决了什么问题?

alt

CI/CD 平台(流水线引擎)发展历史中大概有 3 波浪潮

第一波浪潮以 Jenkins 为代表,让大家广泛的接受了持续集成和持续交付的概念,解决了自动编译、测试、部署代码的问题

第二波浪潮以 GitLab CI 为代表,以代码仓库为入口,设计理念是流水线即代码,开箱即用,使用体验极好,好比大家从 Eclipse 切换到 IntelliJ IDEA,解决了流水线的管理问题

第三波浪潮以 GitHub Actions 为代表,设计理念是将可复用的能完成复杂但是高频任务的脚本封装为原子(Actions),原子和编程语言的函数一样,有入参、出参。解决了流水线里脚本复用难的问题

GitHub 发现了很多流水线里任务是类似的,可以共享出来,故提出了原子的概念,支持使用 JavaScript、yml、Docker 镜像等方式开发原子,提倡通过 GitHub Marketplace(市场)分发原子,降低了大家使用流水线的成本,

最终带来了 GitHub Actions 生态的繁荣,目前 GitHub 市场里有 1.7 万个原子,涉及开发工作流的方方面面,这是世界上最大的流水线生态

基本概念
alt

旁边 :不用担心 github 服务器不够用,浪费他们资源,其实他们借助容器技术,背后n台一个普通的服务器。放心使用就行,他们隔离了,你怎么使用也不会导致他们崩溃。

GitHub Actions 有一些自己的术语。

(1)workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。

(2)job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。

(3)step(步骤):每个 job 由多个 step 构成,一步步完成。

(4)action (动作):每个 step 可以依次执行一个或多个命令(action)

alt
YAML file

alt
  • 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

alt
job
alt
  1. runs-on字段指定运行所需要的虚拟机环境。它是必填字段。目前可用的虚拟机如下

ubuntu-latest,ubuntu-18.04或ubuntu-16.04

windows-latest,windows-2019或windows-2016 macOS-latest或macOS-10.14

  1. 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中更加便捷地进行自动化流程的构建和管理。

  1. run:安装软件

该步骤运行的命令或者 action

teps字段指定每个 Job 的运行步骤,可以包含一个或多个步骤。每个步骤都可以指定以下三个字段。

jobs.<job_id>.steps.name:步骤名称。 jobs.<job_id>.steps.run:该步骤运行的命令或者 action。 jobs.<job_id>.steps.env:该步骤所需的环境变量。

  1. 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?

alt

功能拆解:

如何 拼接 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 多平台发布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值