Actions 中,设置了 secrets
变量,存入的数据比较大,所以用了一下数据压缩方法进行存储。同时保障代码中的数据脱敏。
先看代码
压缩数据
# 程序代码和数据脱敏
# coding: utf-8
import base64
import bz2
import json
# 演示使用的数据
USER_TABLE = {
'176xxxx5668': '用户名 1',
# ...
'185xxxx7213': '用户名 N',
}
print(f'手机号数量 1:{len(USER_TABLE)}')
mobile = list(USER_TABLE.keys())
print(f'手机号数量 2:{len(mobile)}')
mobile = list(set(mobile))
print(f'排重后的手机号数量:{len(mobile)}')
# 压缩数据
data = json.dumps(mobile)
len1 = len(data)
com_data = bz2.compress(data.encode('utf-8'), compresslevel=9)
len2 = len(com_data)
print(f'原始数据长度:{len1},压缩后长度:{len2}, 压缩率:{len1/len2:.2f}')
b64_data = base64.b64encode(com_data).decode('utf-8')
len3 = len(b64_data)
print(f'原始数据长度:{len1},压缩后长度:{len3}, 压缩率:{len1/len3:.2f}')
print('下面这段输出就是存入 Action Secret 中的变量值')
print('-' * 80)
print(b64_data)
print('-' * 80)
解压数据并使用
下面的代码整理后,放到 Action 的执行代码合适的位置,对 Action Secret 变量处理后,使用
decom_data = base64.b64decode(b64_data)
len4 = len(decom_data)
print(f'Base64反解后长度:{len4} 是否一致:{decom_data == com_data}')
decom_data = bz2.decompress(decom_data).decode('utf-8')
len5 = len(decom_data)
print(f'解压后长度:{len5}, 是否一致:{decom_data == data}')
# 验证
decom_data = json.loads(decom_data)
print(type(decom_data), len(decom_data), len(mobile))
print(f'验证结果:{len(decom_data) == len(mobile)}')
其它说明
- 使用 Github Actions 的
Secret
存储敏感数据 - 对于列表、字典等复杂类型的数据,尽量存储为
base64
格式的数据 - 数据量较大的,通过
bz2
或其它压缩形式,对数据进行压缩处理 - 使用前,从
Secret
变量中,读取base64
后的压缩数据,转换成对应的类型数据后方可正常使用 - 在 Actions 程序执行时,尽量不要把敏感数据内容输出到控制台