github actions
语法格式,编写自己的actions,会用到@actions/core用来和actions交互。
其实这些action的逻辑也不是非常难,都是一些本地的读写操作,没有什么黑科技,可以认为GitHub在执行这些action的时候,会分配一台真正的物理机来执行这些action的代码,至于和GitHub仓库的交互,都是通过api完成的。
需求
仓库A是不开源的,是我的项目源码,但是我想要将仓库A的build文件,上传到另外一个GitHub公开仓库B的main分支,同时仓库B的main分支已经设置为pages,这样就能方便别人访问和使用。
设置仓库B的pages
编写仓库A的actions文件 yaml 复制代码 steps: - name: Checkout uses: actions/checkout@v3 - name: install run: npm run installForce - name: pack web run: npm run ccp-pack - name: Deploy uses: peaceiris/actions-gh-pages@v3 with: personal_token: ${{ secrets.PERSONAL_TOKEN }} # 令牌 publish_dir: ./web # 构建后的文件目录 external_repository: tidys/bmfont-online # 仓库B,格式为:user/repo publish_branch: main # 仓库B的分支
我使用的是peaceiris/actions-gh-pages@v3
,其他也尝试了,并不是很好用。
部署到其他仓库的配置里面,我使用的是person_token
,文档上用的是ACTIONS_DEPLOY_KEY
,没整明白怎么搞这个key,但是人家说person_token也支持,所以我就使用的是这个,并且人家也说了自己支持的token类型。
配置person_token
生成token
点击头像
/Settings
,在左侧最下边找到Developer settings
,选择Tokens (classic)
/Generate new token
注意过期时间选择为不过期,并且追加repo的权限
此时会生成一个新的token,并且之后展示一次,记得保存,后续会使用到。
设置token
回到仓库A中,配置新的secrets
secret.name为PERSONAL_TOKEN
,value就是刚刚生成的token值
验证
再次执行acions,如果一切顺利的话,如下图所示:
回到仓库B,可以看到仓库B已经被正确同步了
遇到的问题
github actions 报错nodejs /usr/bin/env: ‘node\r’: No such file or directory Error: Process completed with exit code 127.
因为我的nodejs cli是通过windows打包的,而actions使用Ubuntu,换成windows即可
在cc-plugin v2.1.26修复了该问题
同步到Gitee
发现会删除所有的文件,可以通过该选项规避,这也是通过看这个action的源码发现的逻辑。
vbnet
复制代码
keep_files: true
同步gitee使用的是gitee-pages-action
,举例:
gitee的克隆地址为:
git@gitee.com:tidys/bmfont-online.git
配置gitee的公钥,使用ssh-keygen
生成SSH Key
GIThub仓库一共需要配置3个变量
- GITEE_PWD:your password
- GITEE_REPO: tidys
- GITEE_RSA_PRIVATE_KEY:
private key
,也就是.ssh/id_rsa
这个文件里面的内容,前提是需要将你本机的ras也配置到git仓库中。