本文由 简悦 SimpRead 转码, 原文地址 zhuanlan.zhihu.com
- 前言
在编写github action
的时候, 我们经常需要测试action
的代码,这就需要我们不断的进行 push 提交触发 workflow 进行测试,这样操作非常繁琐。 利用 act 我们可以在本地直接运行 action 进行测试,极大的提高了效率。
本文主要的内容就是对 act 使用做一个记录,偏于以后参考
- 环境
环境: macOS12.4
- 安装
3.1 安装 Docker
brew install docker
3.2 安装 act
brew install act
3.3 Repo 配置
我们把action
所在的repo
克隆到本地,我们直接在此repo
下创建 workflow 进行测试
其中比较重要的是我们需要让 workflow 运行我们的当前需要测试action
调整yml
文件下的uses:
配置
name: Continuous Deploy
on: [push]
jobs:
deploy_job:
runs-on: ubuntu-latest
name: sftp
steps:
- name: Checkout
uses: actions/checkout@v2
- name: deploy file to server
uses: ./ #这里要注意我们直接引用此repo下的action
with:
.....
- 使用 act
cd
到 repo 目录下,如果只 intel 芯片的 mac 我们直接运行 act
命令
如果是 M 系列的 mac,请运行
act --container-architecture linux/amd64
首次运行我们可以根据需要选择我们需要安装的docker image
- Act 使用的一些参数
5.1 Secret
github action
可以读取保存在 repo 中的secret
,但是我们使用 act 的时候不能读取到这些secret
我们可以在 mac 本地创建一个名为act_secret_file
保存密码 (这里名称你可以自己定义),格式为键值对就行。
SERVER_IP="xxxxxx"
SSH_PRIVATE_KEY="xxxxxx"
在运行的时候我们带上文件路径
act --secret-file /Users/wl/act_secret_file
action 中的 secret 就可以正常被读取了
- Rebuild(推荐)
直接运行 act 命名有时候不能执行到最新的代码,我们可以添加 rebuild
参数
这样确保我们运行的是最新的代码
act --rebuild --secret-file /Users/wl/act_secret_file
X. 最后
- 以前写的 SFTP-Deploy-Action 就是用
Act
进行测试的,避免了每次都要上传测试的麻烦
https://github.com/wlixcc/SFTP-Deploy-Action
- 遇到
executable file not found in $PATH, out:
问题,可以参考下面这个回答
- 如果遇到下面这个问题
Error: failed to start container: Error response from daemon: error while creating mount source path '/host_mnt/Users/xxx/.docker/run/docker.sock': mkdir /host_mnt/Users/xxx/.docker/run/docker.sock: operation not supported
我们需要把--container-daemon-socket -
这行添加到~/.actrc
这个文件下保存,然后在运行 act 命令。
https://github.com/nektos/act/issues/2239
- 在
action
中的Dockerfile
中我们可以提前安装一些需要的包
RUN apk update
RUN apk add --no-cache rsync sshpass openssh