GitHub Action
这是GitHub推出的一个类似Azure Pipeline的工具。GitHub Action
这里记录在初次使用GitHub Action时的一些小技巧。
设置环境变量
目前的GitHub Action的环境变量,若是在stage里进行export等操作,那么该环境变量是不会继承到下一个stage里的。若需要一个全局环境变量,则要按下面的方式进行设置。
设置GOPATH
在官方默认的GO环境中,仅设置了GOROOT环境变量,而我们常用的GOPATH并不存在。针对这个情况,我们可以手动设置GOPATH环境变量:
name: Go
on:
schedule:
- cron: 0 0 * * 3
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Set up Go 1.12
uses: actions/setup-go@v1
with:
go-version: 1.12
id: go
- name: Set GOPATH
run: |
echo "##[set-env name=GOPATH;]$(dirname $GITHUB_WORKSPACE)"
echo "##[add-path]$(dirname $GITHUB_WORKSPACE)/bin"
shell: bash
关键点就在Set GOPATH这个step,通过set-env操作设置GOPATH。
其他环境变量
针对其他环境变量,我们也可以使用类似的语句进行设置:
echo "##[set-env name=TAG_NAME;]$(date +%Y%m%d)"
echo "##[set-env name=NAME;]$(date +%Y%m%d)"
GitHub Secrets
在工作流中,我们不免需要设置一些敏感的token, password等数据,这时候就可以使用Github提供的Secrets功能。
当我们在Secrets里设置了所需的数据之后(注意:现在的Secret名称不支持以GITHUB_开头,如GITHUB_TOKEN),就可以在配置文件中通过${{ secrets.TOKEN }}的形式进行引用。
发布Release
目前我有两个项目需要每周定时构建,进行一次Release并发布数据文件。而GitHub Action官方暂时没有支持Release操作的容器,我们需要在Marketplace搜索合用的Action。
我常用的一个Release相关的Action是opspresso/action-release。而这个Action有个问题,它自己的Docker镜像缺少了file命令,因此我fork了一份并替换了基础镜像。Ricky-Hao/action-release
使用方法
- name: Release
uses: Ricky-Hao/action-release@master
env:
GITHUB_TOKEN: ${{ secrets.TOKEN }}
ASSET_PATH: release
TAG_NAME: Latest
NAME: Latest
只要在最后加上一个如上的Release step就行。其中:
* GITHUB_TOKEN:Token-Github,若token仅需要发布Release,那么只要给public repos权限即可。
* ASSET_PATH:发布的文件目录
* TAG_NAME:发布的Tag名称
* NAME:发布的Release名称
该Action还有其他环境变量选项:
* TARGET_COMMITISH:设置创建Tag的特定commit,默认是master
* BODY:描述Tag的文本
* DRAFT:设置为true,则该次发布为草稿形式,默认为false
* PRERELEASE:设置为true,则该次发布为预发布形式,默认为false
发布到PYPI
我有个V2ray.Stats项目,是用于记录V2Ray的流量信息并定期发送邮件的。该项目每个版本会发布在PYPI,因此我需要一个Action进行自动发布。
在这里,有一个很好用的Action叫ross/python-actions,它内置了twine,可以根据PYPI的用户名和密码进行自动发布。
- name: Publish
uses: ross/python-actions/twine@master
env:
TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }}
TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }}
with:
args: "upload --skip-existing ./dist/*"
这里的args参数就是指定运行该Action时的CMD(每个Action其实都是一个Docker容器)。
GitHub Action Budget
GitHub还提供了Action的Budget给我们使用。
[](https://github.com/Ricky-Hao/V2Ray.Stats/actions)
创建Action
每个GitHub Action其实都是一个Docker镜像,通过Dockerfile设定好运行环境,提供一个entrypoint.sh就可以运行。
其中,step.with.args这个参数其实就是提交给容器的CMD,因此不能在这里使用bash命令。