本文由 简悦 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