初体验 GitHub Actions Workflows 工作流入门教程以及我的使用感受
2020年07月09日 14:01:58 · 本文共 2,916 字阅读时间约 10分钟 · 9,928 次浏览GitHub Actions 是 GitHub 于2018年10月推出的持续集成服务。之前我使用的是Travis CI,昨天我体验了一次GitHub Actions,感觉功能更强大,可以玩的地方更多,我就介绍一下我初次使用的感受。
GitHub Actions 是什么
GitHub Actions 可以参考的同类对象有Jenkins、Azure Pelines、CircleCI、TravisCI等,都是持续集成(Continuous integration,简称CI)服务的提供商,持续集成其实说白了就是根据每次提交的变化不停的在设计、开发、测试、发布这样滚动:
而持续集成的流程是由很多步奏组成的,例如先构建准备运行环境、从Git指定分支拉取代码、编译打包、运行单元测试、登陆远程服务器、发布到第三方等等步奏,GitHub把这些动作都称之为Action,所以由多个Action构成的工作流就被命名为 GitHub Actions。
为了能让Actions能够复用,GitHub还提供了官方市场,可以搜索其他人提交的Action脚本,还有其他人收集的Action仓库:awesome actions。
GitHub Actions 的构成
GitHub Actions 是由下面几部分组成的:
- workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。
- job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
- step(步骤):每个 job 由多个 step 构成,一步步完成。
- action (动作):每个 step 可以依次执行一个或多个命令(action)。
GitHub Actions 工作流文件
想要配置 GitHub Actions 的工作流,我们只需要定义一个YAML文件即可,它存放在代码仓库的.github/workflows目录,例如我的工作流文件:https://github.com/renfei-net/WinterEE/blob/513214d5e7288cee65721c9d05aebdff18d60a04/.github/workflows/build.yml,文件的名字可以自己定义,没有要求。workflow 的语法字段非常多,可以参见官方文档。下面是我自己写的工作流文件:
name: build
on: [push, pull_request]
jobs:
build:
name: building
runs-on: ubuntu-latest
services:
mysql:
image: mysql:5.7
ports:
- 3306:3306
env:
MYSQL_ALLOW_EMPTY_PASSWORD: yes
MYSQL_DATABASE: winteree
MYSQL_ROOT_PASSWORD: root
options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
rabbitmq:
image: rabbitmq:3.7.26-management-alpine
ports:
- 15672:15672
- 5672:5672
zipkin:
image: openzipkin/zipkin:2.21.1
ports:
- 9411:9411
redis:
image: redis:6.0.1
ports:
- 6379:6379
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Verify MariaDB Connection and Load Data
env:
PORT: ${{ job.services.mysql.ports[3306] }}
run: |
while ! mysqladmin ping -h"127.0.0.1" -P"$PORT" --silent; do
sleep 1
done
- name: Loading Database
env:
PORT: ${{ job.services.mysql.ports[3306] }}
run: mysql -h 127.0.0.1 -P $PORT -uroot -proot --default-character-set=utf8 winteree < environment/db/winteree.sql
- name: Cache Maven packages
uses: actions/cache@v2
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Build with Maven
run: mvn -B clean package --file pom.xml
- name: Upload Coveralls
shell: bash
run: |
curl -s https://codecov.io/bash
mvn clean test org.jacoco:jacoco-maven-plugin:prepare-agent install org.jacoco:jacoco-maven-plugin:report
mvn org.eluder.coveralls:coveralls-maven-plugin:report -DrepoToken="${{ secrets.coveralls_token }}"
- name:是我给这个工作流起的名字,你可以起一个属于你的名字,这个没有要求。
- on:是指定触发 workflow 的条件,通常是某些事件,我这里定义了push和pull_request事件就会触发这个工作流。
- jobs:是workflow 文件的主体,表示要执行的一项或多项任务。
- jobs.build:是我自己给这个任务起的ID叫”build“,下面我使用<job_id>来代替这个任务ID,你可以给你的任务起一个你自己的任务ID。
- jobs.<job_id>.name:是我自己给这个任务起的名字叫”building“,你可以给你的任务起一个你自己的任务名称。
- jobs.<job_id>.runs-on:是指定运行所需要的虚拟机环境。它是必填字段。目前可用的虚拟机有:ubuntu、windows、macOS。
- jobs.<job_id>.services:是声明运行环境所需要的服务,我这里使用了MySQL、RabbitMQ、Zipkin、Redis。
- jobs.<job_id>.steps:指定每个 Job 的运行步骤,可以包含一个或多个步骤。
- jobs.<job_id>.steps.name:指这个不步奏的名称。
- jobs.<job_id>.steps.run:指该步骤运行的命令或者 action。
- jobs.<job_id>.steps.env:指该步骤所需的环境变量。
GitHub Actions 中使用密码
密码是不应该公开在代码仓库里的,所以需要先到项目仓库的 Settings -> Secrets 中添加你的密码,例如我添加了名为”COVERALLS_TOKEN“的密码:
然后在workflow流程文件中使用”${{ secrets.coveralls_token }}“这样的格式来使用。
GitHub Actions 的徽章图标
以后,每次修改后推送源码,GitHub Actions 都会自动运行,那怎么知道运行的结果呢,GitHub Actions 为我们提供了徽标图标,可以加入到你的项目主页中,图标地址语法如下:
https://github.com/<OWNER>/<REPOSITORY>/workflows/<WORKFLOW_NAME>/badge.svg?branch=<branch-name>
- <OWNER>:所有者的用户名
- <REPOSITORY>:项目仓库名称
- <WORKFLOW_NAME>:工作流名称
- <branch-name>:分支名称,如果不写默认是master分支
所以我的图标地址就是:https://github.com/renfei-net/WinterEE/workflows/build/badge.svg
我的使用感受
我之前一直使用的是TravisCI,这次使用了GitHub Actions以后感觉速度比TravisCI快很多,而且支持的东西也比TravisCI多,配置起来也不复杂,可玩性非常高,可以实现非常多自动化的东西,以后我主要就使用GitHub Actions来做CI/CD了。
版权声明:本文为博主「任霏」原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.renfei.net/posts/1003399
相关推荐
猜你还喜欢这些内容,不妨试试阅读一下以下内容均由网友提交发布,版权与真实性无法查证,请自行辨别。
- 前后端分离项目接口数据加密的秘钥交换逻辑(RSA、AES)
- OmniGraffle 激活/破解 密钥/密匙/Key/License
- Parallels Desktop For Mac 16.0.1.48911 破解版 [TNT]
- Redis 未授权访问漏洞分析 cleanfda 脚本复现漏洞挖矿
- CleanMyMac X 破解版 [TNT] 4.6.0
- OmniPlan 激活/破解 密钥/密匙/Key/License
- 人大金仓 KingbaseES V8 R3 安装包、驱动包和 License 下载地址
- Sound Control 破解版 2.4.2
- Parallels Desktop For Mac 15.1.4.47270 破解版 [TNT]
- Parallels Desktop For Mac 16.0.0.48916 破解版 [TNT]
- 博客完全迁移上阿里云,我所使用的阿里云架构
- 微软确认Windows 10存在bug 部分电脑升级后被冻结
- 大佬们在说的AQS,到底啥是个AQS(AbstractQueuedSynchronizer)同步队列
- 比特币(BTC)钱包客户端区块链数据同步慢,区块链数据离线下载
- Java中说的CAS(compare and swap)是个啥
- 小心免费主题!那些WordPress主题后门,一招拥有管理员权限
- 强烈谴责[wamae.win]恶意反向代理我站并篡改我站网页
- 讨论下Java中的volatile和JMM(Java Memory Model)Java内存模型
- 新版个人网站 NEILREN4J 上线并开源程序源码
- 我站近期遭受到恶意不友好访问攻击公告