GitHub Actions CI/CD 工作流实战
1. 什么是 GitHub Actions 与 workflow ?
GitHub Actions 是 GitHub 提供的一种持续集成(CI)和持续部署(CD)的工具,用于自动化软件开发过程中的各种任务和工作流。GitHub Action Workflow 是一组定义在存储库中的自动化任务,可以根据不同的事件(例如代码推送、拉取请求、问题创建等)触发执行。
每个 GitHub Action Workflow 都是由一个或多个步骤(Steps)组成,每个步骤可以包含一个或多个命令、脚本或操作。这些步骤可以按顺序执行,也可以并行执行,以便自动化构建、测试、部署等任务。
一些常见的用途包括:
- 自动测试和构建: 在代码推送到存储库时自动运行测试,确保代码的质量和稳定性。
- 自动部署: 当代码合并到主分支时,自动将应用程序部署到生产环境。
- 发布通知: 在新问题创建或拉取请求时,自动发送通知到团队成员。
- 自动化文档生成: 在代码变更时,自动生成更新的文档。
- 版本发布: 在发布新版本时,自动执行一系列步骤,如创建标签、生成发布文件等。
- 代码质量检查: 自动运行代码风格检查、静态分析等工具,以确保代码符合规范。
- 容器构建: 自动构建 Docker 镜像并将其推送到容器注册表。
- 多环境支持: 根据不同分支或标签,自动执行适合的工作流程,以支持不同的开发、测试和生产环境。
GitHub Action Workflow 使用 YAML 文件来定义,该文件位于存储库中的 .github/workflows 目录下。这些定义可以根据项目的需求进行配置和自定义。
2. 代码实战
2.1 以MSVS工程(C++工程)为例
# 定义构建流程
name: Build Process
# 当代码被推送到存储库时触发工作流
on: push
jobs:
# 定义构建作业
build:
# 在 Windows 环境中运行
runs-on: windows-latest
steps:
# 步骤:检出代码
- name: Checkout code
uses: actions/checkout@v3
# 步骤:设置 MSBuild
- name: Setup MSBuild
uses: microsoft/setup-msbuild@v1.1
# 步骤:构建 VS 项目
- name: Build VS Project
run: |
# 运行生成 DLL 的命令
msbuild project.sln /p:Configuration=Release /p:Platform=x64
# 步骤:上传 ZIP 构件
- name: Upload ZIP Artifact
uses: actions/upload-artifact@v3
with:
name: project
# 压缩包过期时间
retention-days: 90
# 压缩包路径,需要根据自己项目配置进行相对应的设置
path: |
release
2.2 以Maven项目(Java项目)为例
# 定义构建流程
name: Build Process
# 当代码被推送到存储库时触发工作流
on: push
jobs:
# 定义构建作业
build:
# 在 Ubuntu 环境中运行
runs-on: ubuntu-latest
steps:
# 步骤:检出代码
- name: Checkout code
uses: actions/checkout@v3
# 步骤:设置 Java 环境为 JDK 8,并使用 Corretto 发行版,缓存 Maven
- name: Setup Java
uses: actions/setup-java@v3
with:
java-version: '8'
distribution: 'corretto'
cache: 'maven'
# 步骤:构建 Maven 项目
- name: Build Maven Project
run: |
# 运行打包 Maven 项目的命令
mvn -DskipTests package
# 步骤:上传 ZIP 构件
- name: Upload ZIP Artifact
uses: actions/upload-artifact@v3
with:
name: project
retention-days: 90
path: |
target/*
3. 如何找到GitHub Actions
3.1 找到你的GitHub仓库

3.2 提交你的workflow文件
在项目根路径建立/.github/workflows文件夹,并在这个路径下放置你的yaml构建脚本
3.3 等待GitHub Actions构建完成

4. Actions MarketPlace
如果你对于一些不会写的构建过程,你可以到Actions MarketPlace找到对应的构建脚本并直接使用。
https://github.com/marketplace?type=actions
附录
官方中文GitHub Actions文档
https://docs.github.com/zh/actions
GitHub Actions CI/CD 工作流实战的更多相关文章
- Github原生CI/CD,初尝Github Actions
Github 原生 CI/CD,初尝 Github Actions Intro Github 目前已经推出了自己的 CICD 服务 -- Github Actions,而且比微软的 Azure Dev ...
- 技术番外篇丨Github Action CI/CD
起源 看到.Net群里再聊CI/CD,我就这里分享一下我目前自己一些小东西的做法,我目前在Github有一个自己私有的组织,里面存放了我的部分商业化项目,早期我采用Jenkins用Webhooks进行 ...
- Docker: Jenkins与Docker的自动化CI/CD流水线实战
什么是CI/CD 持续集成(Continuous Integration,CI):代码合并.构建.部署.测试都在一起,不断地执行这个过程,并对结果反馈.持续部署(Continuous Deployme ...
- 使用 GitHub Actions 实现 Hexo 博客自动部署
一.Hexo 相关知识点 静态博客简单,但是发布博文时稍显麻烦,一般需要下面两步: hexo clean hexo g -d // 相当于 hexo g + hexo d 如果考虑到同步源文件,还需要 ...
- GitHub Actions
GitHub Actions CI/CD & testing https://github.com/features/actions refs xgqfrms 2012-2020 www.cn ...
- Github Packages和Github Actions实践之CI/CD
概述 Github在被微软收购后,不忘初心,且更大力度的造福开发者们,推出了免费私有仓库等大更新.近期又开放了packages和actions两个大招,经笔者试用后感觉这两个功能配合起来简直无敌. G ...
- 如何在 Jenkins CI/CD 流水线中保护密钥?
CI/CD 流水线是 DevOps 团队软件交付过程的基本组成部分.该流水线利用自动化和持续监控来实现软件的无缝交付.通过持续自动化,确保 CI/CD 流水线每一步的安全性非常重要.在流水线的各个阶段 ...
- GitHub Actions 完成CI CD
在之前我的部署.版本控制.CI.CD都是在Jenkins 下来完成的 在前几天看到github上的一个新玩具actions,简直惊为天人 它能在你的仓库触发事件(Push,Pull,issue,... ...
- 使用.NET 6开发TodoList应用(31)——实现基于Github Actions和ACI的CI/CD
系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求和目标 在这个系列的最后一节中,我们将使用GitHub Actions将TodoList应用部署到Azure Container ...
- Jenkins CI&CD 自动化发布项目实战(下篇)
Jenkins CI&CD 自动化发布项目实战(下篇) 作者 刘畅 时间 2020-12-04 实验环境 centos7.5 主机名 ip 服务配置 软件 gitlab 172.16.1.71 ...
随机推荐
- 【GiraKoo】Java Native Interface(JNI)的空间(引用)管理
Java Native Interface(JNI)的空间(引用)管理 Java是通过垃圾回收机制回收内存,C/C++是通过malloc,free,new,delete手动管理空间.那么在JNI层,同 ...
- AcWing 1019. 庆功会
为了庆贺班级在校运动会上取得全校第一名成绩,班主任决定开一场庆功会,为此拨款购买奖品犒劳运动员. 期望拨款金额能购买最大价值的奖品,可以补充他们的精力和体力. 输入格式 第一行二个数n,m,其中n代表 ...
- MAIXIII(爱芯派)的一种配网并安装nmtui的实现方法
关于一种MAIXIII(爱芯派)的一种配网并安装nmtui的实现方法 特别感谢sipped的大佬鼠以及多位群友这几天提供的帮助与支持! 0.目录 一,MAIXIII简介 二,到手图展示 三,具体操作方 ...
- [MAUI程序设计] 用Handler实现自定义跨平台控件
@ 目录 Handler 与Xamarin.Forms实现的区别 为什么要用Handler代替Renderer 解耦 生命周期管理 更细粒度的控制 用Effect来实现呢? 自定义手势监听控件 在各平 ...
- 完成第一个 Vue3.2 项目后,使用体会
第一次Composition API 在vue3.2中,正式支持了script setup的写法,这样可以大大简化组件的代码量,减少一些重复操作,我认为当你写vue3时,应该把这当作默认写法.在vue ...
- 使用CNI网络插件(calico)实现docker容器跨主机互联
目录 一.系统环境 二.前言 三.CNI网络插件简介 四.常见的几种CNI网络插件对比 五.Calico网络之间是如何通信的 六.配置calico让物理机A上的docker容器c1可以访问物理机B上的 ...
- 「学习笔记」DP 学习笔记1
序列 DP 一般序列 DP 核心思想:将序列的前 \(i\) 个数的状态用一个更简单的形式表示出,并且体现出这些状态对后续的影响. 题目 ABC 267D 给定一个序列 \(a\),找到一个长度为 \ ...
- IM1281B电能计量模块_C语言例程
一.前言 毕设采用了艾锐达公司的IM1281B电量计能模块,找了一圈没发现具体的51单片机的例程,现在写个能使用的C语言例程,方便以后的开发者们. 二.事前准备 引脚定义: 引脚 功能说明 V+ 供电 ...
- 消失的死锁:从 JSF 线程池满到 JVM 初始化原理剖析
一.问题描述 在一次上线时,按照正常流程上线后,观察了线上报文.接口可用率十分钟以上,未出现异常情况,结果在上线一小时后突然收到jsf线程池耗尽的报警,并且该应用一共有30台机器,只有一台机器出现该问 ...
- macOS 系统 Kafka 快速入门
Kafka 的核心功能是高性能的消息发送与高性能的消息消费.以下是 Kafka 的快速入门教程. 下载并解压缩 Kafka 二进制代码压缩文件 打开 Kafka 官网的下载地址,可以看到不同版本的 K ...