type
status
date
slug
summary
tags
category
icon
password
标签
是否汉化
📌
系统之思 对于一个系统来说,整体大于部分之和。任何一个系统都包括三种构成要件:要素、连接、功能或目标。它具有适应性、动态性、目的性,并可以自组织、自我保护与演进。

Github Action 简单实践


目标

假定当前项目下有一个 script.py 爬虫脚本,我们想要定期执行这个 Python 爬虫,并将运行结果(JSON 文件)推送回仓库。

编写

首先需要在项目的根目录下创建 .github/workflows 文件夹,并且在文件夹下创建 YAML 文件用于编写执行脚本,如 action.yml 。

名称

首先先要给整个工作流程设置一个名称:

触发条件

接着设定该 Github Action 要在什么时候触发。我需要这个爬虫脚本每天 12 点自动运行,于是:
这里要注意的是时区问题,cron 用的是 UTC 时间,所以我们通常需要用北京时间减 8 小时。
触发条件还有许多种,例如推送时运行 push: 等。

环境变量

这里设定环境变量是因为接下去需要用到本地时间的设定。

工作指令

接下去就要正式设定整个工作流程的具体命令了。格式如下:
jobs 下可以包含一个或多个任务,任务之间可以顺序的执行,也可以同时执行。这里我只需要执行一个任务即可。

运行环境

在单个任务中,首先需要设置的是虚拟的运行环境,如:

步骤

接下来就要设置每个步骤的指令,首先要 checkout the repository under $GITHUB_WORKSPACE :
因为是 Python 爬虫,所以需要安装对应的依赖:
最后,需要把生成的文件提交回仓库:
这里有几点需要注意:
  1. 首先,很多教程里 git 的名字和邮箱都是直接明文写在了配置文件里,这样其实有隐私泄露的风险。正确的做法应该是将信息写入到仓库的 Setting - Secrets 中并在运行时读取。
  1. 如果不想把提交设置为自己,可以配置成:

完整的配置代码

GitHub Actions 中 python 脚本获取仓库 secrets

GitHub Actions 提供的 CI/CD(持续集成/持续部署) 服务非常方便,可以帮助我们自动完成一些功能。但是当我们在跑一些脚本的时候,不免会存放一些密码、密钥之类的内容。我们期望跑脚本的同时,不以明文的方式存储这类密码
✍🏻
将 GitHub Actions 与 GitHub 仓库的 Secrets 结合,可以轻松帮助我们满足这项需求
下面以基于 ServerChan 的 LeetCode 周赛提醒功能为例

添加 Secrets

ServerChan 的推送功能需要设置 SCKEY 字段,但是该字段不应以明文方式存储
打开仓库「Settings」中的「Secrets」,点击「New secret」

配置 GitHub Actions

用来向 ServerChan 接口发送请求的文件名为 main.py
git bash 中键入命令,新建文件
 
编辑 leetcode-weekly.yml,键入以下内容
其中,在 Working 步骤中,指定了环境变量 SCKEY,并将它的 value 设为 secrets.SCKEY

python 脚本中获取环境变量

import os
同理,对于一些需要登录的脚本也可以使用以上方式实现加密

自动将所有GitHub secrets设置为环境变量

要将所有GitHub secrets设置为环境变量,可以使用GitHub的API来获取存储库的secrets列表,并将每个secret设置为本地环境变量。
以下是一个示例Python代码,使用GitHub的REST API v3来获取存储库的secrets列表,并将每个secret设置为环境变量:
在上面的代码中,access_token是你的GitHub访问令牌,repo_owner是存储库的所有者,repo_name是存储库的名称。请确保将这些值替换为你自己的信息。
代码中的requests.get()方法发送一个GET请求来获取存储库的secrets列表。然后,通过循环遍历secrets列表,并使用os.environ将每个secret设置为本地环境变量。
最后,我们可以使用os.environ['SECRET_NAME']来访问设置的环境变量。请将SECRET_NAME替换为你想要访问的特定secret的名称。
 
 

🎒
离开乏味的皮囊,自由的灵魂在路上
  • Name: Alan Hsu
  • Tag: 随感、技术、经验、旅行、推荐、生活、音乐、电影 etc.
  • Email:xulanzhong521gmail.com
  • WeChat: Alan_Hsu_521
notion image
notion image
 
 
 
Python中的命名规则2024_周报 #17
Loading...