前言
最近接触了一下Github Actions,不得不说,在国内这个网络环境下,这个功能真的给了很多方便的功能。
- 首先它能够实现在线调试、编译、和测试开发代码。
- 其次它部署简单,仅用一个脚本文件就能执行起代码的调试编译,而且脚本文件的编写也很简单,在网站上也有模板。
- 再来它的官方文档有简体中文,这个真的大大方便了中国大陆用户的学习。
- 最后它用起来很舒服,它和docker一样,它每次执行都是独立的,不会在同一个容器执行,不会影响之前的执行情况,在调试脚本的时候真的很好用。它还能直接上传编译出来的文件。
Github Actions真的很香。今天就写个文章来记录一下使用Github Actions的一些事情。
正文
简单使用
Github Actions的使用,主要由一个yaml脚本支撑起来。yaml脚本的内容实际上就是一个工作流的指示文件,意思是说,这个脚本把一个工作流程都给一一列举出来,Github Actions会根据这个脚本来执行代码操作。说白了,yaml就是一个工作流程的指示文件,Github Actions根据文件的指示来操作。脚本模板如下:
name: CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Go environment
uses: actions/setup-go@v2.1.0
- name: download code
run: |
wget xxxxxxx
wget xxxxxxxx
这是一个很简单的模板,这个模板使用了golang环境,就是说在执行Actions的时候它会自动安装并配置golang的使用环境。同时它使用的是ubuntu系统,当然这些都可以更改,下面就解释一下一些关键字。name:此处包含模板的所有name,这个字段的内容均可以随意更换,实际上就是命名,没有什么其他用途,只是用于可视化中进行识别。on:字段指定触发 workflow 的条件,通常是某些事件。例如上面的push和pull_request事件,详情可查阅官方文档。触发工作流程的事件jobs:这个字段就是工作流程了,里面主要是描述整个工作流程,可以拥有多个jobs,但是所有jobs都是并行的,如果需要有顺序执行,可以在每个jobs的开始输入needs关键字,例如:
jobs:
job1:
job2:
needs: job1
job3:
needs: [job1, job2]在此示例中,job1 必须在 job2 开始之前成功完成,而 job3 要等待 job1 和 job2 完成。
此处注意到:build,这个不是关键字,这个是jobs_id,属于唯一标识符,上面的needs例子中,job1就是一个jobs_id,这个id是可以随意自定义的,但是这代表了这一个job的一个唯一标识。runs-on:github actions托管器,说白了就是系统,和docker容器里面的系统是一样的。可参考官方文档里面有什么系统,官方文档末尾提供。steps:执行步骤,步骤按顺序执行。uses:这一步骤需要先调用哪个Action,其实相当于调用已有的Actions库里面的脚本,这个可以直接快速配置相关环境。run:这里输入执行的命令代码,值得注意的是,如果想要输入多条命令用换行分割的情况下,可以像示例一样加一条|。
用到这里,Github Actions最基础的用法和写法就完成了,后面解释一些可能会用到的内容。
补充内容
1.上传文件到artifact
代码示例
- name: upload
uses: actions/upload-artifact@v2
with:
name: aaa
path: path/to/aaa
此处name和uses就不多赘述了,参考上面,主要是讲下with。with:接上面传入uses的库的参数。
示例后面接着两个参数,参数内容在actions/upload-artifact@v2库里面是指定的,所以只有name和path,name代表上传文件的名字,path代表需要上传的文件所在的路径,而不是上传到github上面的路径,是Actions容器里面需要上传的文件的路径,需要自己去查阅自己编译的文件在哪里。
2.jobs和steps的单独环境变量配置
jobs的环境是可以单独配置的,代码如下:
jobs:
job1:
env:
GOROOT: /etc这里相当于GOROOT环境变量设置到了/etc。而steps同理,代码如下
steps:
- uses: actions/checkout@v2
- name: Setup Go environment
uses: actions/setup-go@v2.1.0
- name: download code
env: GOROOT: /etc
run: |
wget xxxxxxx
wget xxxxxxxx
3.if判断
表达式通常在工作流程文件中与条件性 if 关键词一起用来确定步骤是否应该运行。当 if 条件为 true 时,步骤将会运行。
您需要使用特定语法指示 GitHub 对表达式求值,而不是将其视为字符串。
${{ <expression> }}
在 if 条件下使用表达式时,可以省略表达式语法 (${{ }}),因为 GitHub 会自动将 if 条件作为表达式求值。
总结
目前研究内容较少,所以只是初体验,以后有其他内容再写一篇文章补充吧。这里算是最简单的了。已经测试过通过了,比写bash脚本还简单。在国内,拉取github代码过于缓慢的环境下,github actions真的提供了很多方便。以后有什么需要的软件可以直接在github actions上面编译下载了。
参考资料
1.官方文档:GitHub 操作的工作流程语法
2.官方文档:GitHub 操作的上下文和表达式语法
3.官方文档:使用构件持久化工作流程数据(文件上传参考)
4.最后的一只章鱼猫 —— GitHub Actions 实现编译打包 Golang 到 Docker 镜像
5.编写自己的 GitHub Action,体验自动化部署
6.GitHub Actions 入门教程




0 条评论