2019/8 ——推出的新功能。
可以完全替代掉好基友Travis CI来完成github项目的CI/CD操作了。
1.新建一个项目
2.Actions基础介绍:
这里给了一些推荐的流程,比如Nodejs等。
这里还是使用自定义流程:
这里什么都不修改,直接点击提交代码:
Actions已经正在运行了:
然后回过头再看看这个CI执行了什么东西:
1. 先给这个流程命名为CI:
2.on:决定它什么时候触发:
3. 然后是触发的是具体的jobs:
jobs可以写多项,这里只写了一项build.
runs-on表示在什么系统下运行的,这里指定的是ubuntu,github给我们提供了默认的几个。
然后steps指定具体的步骤,每个 - 代表一步:
第一步是checkout把代码下载下来,第二步是运行一行简单的shell脚本,第3步是运行多行shell脚本。
3. Actions的各种用法:
这里是actions的语法文档:
文档:传送门
(这一列很有意思)
通过actions的文档可以大体看出主要分为3类:
- name: 命令actions为什么名字
- on: 什么时机下触发我们的任务
- jobs: 具体触发的任务
来看看actions的各种用法:
主分支的src下发生了改动提交了代码就触发当前流程。
schedule: 和提交代码相互独立,写schedule就不能写push,原因是schedule是指定了固定时间去触发。(cron可以看我的cron博客)
jobs:
name: 可以给任务一个名字:
need: 指当前job执行之前需要等待指定的job执行完成
runs-on: 当前运行的流程在什么系统下去运行
steps: 指定运行什么步骤:
一般拉取代码需要这样:
当然太繁琐了,所以github提供了类似这样的:
这个是怎么做到的?
不得不提uses参数:
官网讲的很清楚了,uses参数可以接多种类型,最常用的类型是接另一个代码仓库。
比如
意思就是github上有个用户叫actions(github actions官方账号),有个仓库就叫checkout,仓库里写好了一些流程把代码下载下来等,这里我们可以直接复用它的流程。
默认的机器是没有node和java这样的环境,github给我们提供了这些语言的默认流程:
这里有各种语言的,比如docker:
语言环境actions yml参考:
就可以参考这个怎么写的:
来看看nodejs它怎么写的:
运行了uses: actions/setup-node来设置当前使用nodejs这个库来运行。
timout-minutes: 指定超时时间
strategy: 指定策略
如上面nodejs的多策略的写法。
uses的工作原理:
具体的用法:
定义了输入和参数、描述。
可以发现并没有下载和安装nodejs的步骤。那怎么做到让当前环境使用nodejs呢?
其实在ubuntu-latest下已经安装了各种语言的环境,可以自己尝试一下打印一下语言的version就知道了。
甚至机器下的每种语言的多版本都安装了,可以通过with -- version来指定具体的版本,不指定就使用默认版本。
其实uses不仅仅限定于引用其他仓库的描述文件,还可以引用当前仓库的action文件和其他仓库的action文件可以接commit标号和release版本或者branch分支的版本。甚至还可以引用docker,但是引用镜像只是运行了docker run,并不是说run 指令在具体的容器中运行,这里不是在容器中运行,而是在分配的机器中运行。那么怎么在容器中运行呢?
下面的container指令就是答案:
关于docker的高级用法:
比如:
所以在container下使用docker才是正确用法而不是在uses下。
最后再来看services:
它就是运性一个job的service,下面可以运行镜像。
具体用法就自己查阅吧,其实官方文档才是最权威的,而且示例给的很清楚,就不再废话了。
- run: |
xxxxx
xxx
不加竖线,只能写一行脚本.加了就可以写多行
如果执行的流程中设计到密码等比较敏感的信息可以添加secrets:
然后查看日志,看到是***,具体的是没有显示的,这时因为开源项目的actions日志是可以被别人看到的,但实际上变量实际上已经写进去了是可用的。