每天签到领积分、再派猫猫出去旅行领积分——攒得不多,但天天要手动点一下很烦。 这个项目把整套流程搬到云端定时跑:每天 00:05(北京时间)自动签到 + 领积分 + 派猫猫旅行, 电脑关机、客户端不开也能签。
下面是部署流程与关键决策的整理,仓库地址、完整命令与排错表请到掘金阅读。
一句话要点
- 云端只存明文 JWT,不需要账号密码;脚本纯标准库、零第三方依赖。
- 凭据只能经 imports 注入,所以「代码仓库 + 独立密钥仓库」两个库这一步不能省。
- 每条流水线日志都会输出完整结果,方便自己接通知渠道。
一、准备清单
- 客户端:部署当天需要开着并登录一次,用于导出登录态。
- Python 3.8+:本机执行「生成密钥」命令时用;云端已自带
python:3.12-slim。 - CNB 账号:免费,用于托管代码和跑流水线。
- Git(可选):Fork 和本地跑命令会用到,不想装也可以全程在网页端操作。
二、部署只有四步
第 1 步:建两个仓库
把源码 Fork 到自己的账号下,这就是签到仓库(建议设为 Private); 再新建一个密钥仓库专门放登录凭据,与代码库隔离,务必 Private。
为什么要两个库?密钥是敏感凭据,单独放在一个私有库里, 避免跟代码混在一起被误提交或误公开。
第 2 步:把密钥仓库接进来
在签到仓库根目录的 .cnb.yml 里,把 imports 地址改成自己的密钥仓库:
imports:
- https://cnb.cool/<你的用户名>/workbuddy-checkin-secrets/-/blob/main/.cnb/workbuddy-secrets.yml
凭据只能经 imports 注入,所以这一步不能省。
第 3 步:本机生成密钥文件
在签到仓库目录下,且客户端正在运行并已登录的状态下执行:
python tools/make_min_auth.py --out secrets.yml --slug auto
它会自动完成四件事:读取本机登录态 → 解密(加密态也能处理)→ 导出明文 JWT →
生成一份可直接整份复制的 secrets.yml。
--slug auto 会用 git remote 自动填好仓库名。
第 4 步:粘贴 + 首次运行
在密钥仓库新建 .cnb/workbuddy-secrets.yml,把上一步的产物整份粘进去并提交;
回到签到仓库的「代码构建」页点「执行」,在日志里看到
登录态字符数、领取成功 或 今日已签到 就代表跑通了。
三、日常维护
换 Token(约 55 天一次)
登录态是 JWT,实测有效期约 55 天,流水线每天打印剩余天数,
不足 7 天会给 warning。到期前:打开并登录客户端 → 重新生成 secrets.yml →
整份覆盖密钥仓库里的文件 → 提交。
「打开并登录客户端」这步不能省:密钥只存在于运行中的客户端进程内存里, 关掉客户端只能拿到密文。
改签到时间
改 .cnb.yml 里的 "crontab: 5 0 * * *" 推到 main 之后,
要重新生成一次密钥文件覆盖过去——
allow_events 是从 .cnb.yml 自动推导的,不重新生成会校验失败。
四、几个容易卡住的点
- 本地报「解密 accessToken 失败」:密钥只在运行中的客户端进程内存里,确认客户端已登录、与脚本同一 Windows 用户。
- 日志报「Secret 内容疑似被截断」:粘贴时被截断了,删掉旧变量重新整份生成再覆盖。
- 到点没跑但手动能跑:按序查
allow_events是否对齐、配置是否在 main 分支、cron 时区固定为Asia/Shanghai(直接写北京时间)。 docker.image不能删:CNB 默认构建环境不含python3。
五、关于通知
项目不内置推送配置——脚本每次运行会输出完整的结果 JSON 并写入 checkin.log,
可以据此接任意通知渠道。不希望产生通知副作用时加 --no-notify。
小结
整个部署的核心就一句:Fork 仓库 → 建个密钥仓库 → 一条命令导出密钥 → 粘进私有密钥仓库 → 点一次执行。 剩下的换 Token、改时间也都是「跑命令 → 覆盖提交」两步。