
文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载本文是 90DaysOfDevOps 学习挑战中 CI/CD 专题的第 75 天内容系统讲解 GitHub Actions 这一 CI/CD 平台的核心概念体系Workflow、Events、Jobs、Steps、Actions、Runners并通过一个基于github/super-linter的代码检查工作流实例带你掌握如何在仓库中创建.github/workflows/工作流文件、触发运行、排查失败并观察成功状态。读完本文你将具备独立编写 YAML 格式 GitHub Actions 工作流并接入代码质量检查的基本实战能力。GitHub Actions 是什么在完成前面章节 Jenkins 相关内容之后本节换一种思路聚焦 GitHub Actions。GitHub Actions 是一个 CI/CD 平台允许我们在 GitHub 仓库上完成构建build、测试test、部署deploy等流水线任务。它引入了workflow工作流的概念用来针对 GitHub 仓库进行构建和测试你也可以基于仓库中发生的各种事件events驱动其他自动化工作流。从 90DaysOfDevOps 的路线图来看本系列在 CI/CD 阶段先介绍了 Jenkins其本地部署步骤与管道示例可参见 Jenkins 部署步骤 与 Jenkinsfile 示例而 GitHub Actions 则提供了一种与 Jenkins 不同的、深度绑定 GitHub 仓库生态的自动化方式——无需自建服务器即可快速构建持续集成能力。GitHub Actions 核心概念体系在 GitHub Actions 中我们的自动化任务整体被称为Workflow工作流围绕它有一整套相互关联的概念Workflow工作流可配置的自动化过程以 YAML 文件定义包含并运行一个或多个jobs任务由仓库中的event事件触发也可以手动运行每个仓库可以拥有多个工作流。一个工作流内部包含 jobjob 内部包含 steps步骤以达成该 job 的目标工作流还会运行在某个runner运行器之上。Events事件仓库中触发工作流运行的特定事件如 push、pull request 等。Jobs任务工作流中在 runner 上执行的一组步骤。Steps步骤job 内的每个步骤可以是一个被执行的 shell 脚本也可以是一个 action动作。步骤按顺序执行并且相互依赖。Actions动作可复用的自定义应用用于频繁重复的任务。Runners运行器运行工作流的服务器每个 runner 一次只运行一个 job。GitHub Actions 提供 Ubuntu Linux、Microsoft Windows 和 macOS 运行器你也可以在特定操作系统或硬件上自托管 runner。一个典型的应用场景是用一个工作流来构建并测试 pull request用另一个工作流在每次创建 release 时部署应用再用一个工作流在有人新建 issue 时自动添加标签。三者互不干扰体现了一个仓库可配置多个工作流的灵活性。下图直观展示了概念之间的层级关系事件触发工作流工作流包含两个 jobjob 内部再包含 steps 与 actions。用 YAML 定义第一个工作流在进入真实用例之前先通过一个示例 YAML 文件把上述概念落成代码。注释#标注了每个组成部分对应的概念# Workflow工作流名称 name: 90DaysOfDevOps # Event触发事件push 到仓库任意分支时触发 on: [push] # Jobs任务定义区 jobs: check-bats-version: # Runners指定运行器镜像 runs-on: ubuntu-latest # Steps步骤列表 steps: # Actions复用社区动作 - uses: actions/checkoutv2 - uses: actions/setup-nodev2 with: node-version: 14 - run: npm install -g bats - run: bats -v这个示例演示了工作流文件的最小完整骨架name声明工作流名称on声明触发事件jobs下定义任务每个任务指定runs-on运行器任务内通过steps依次执行动作。其中uses引用的是社区预置的 action如actions/checkout用于检出代码、actions/setup-node用于配置 Node.js 环境run则直接执行 shell 命令这里安装并验证 bats 测试框架版本。从源码结构看actions/setup-nodev2通过with.node-version指定 Node 版本这正是工作流中可配置输入参数的典型用法。实战用 GitHub Actions 对代码做 Lint 检查GitHub Actions 能满足构建、测试、部署以及后续持续步骤的 CI/CD 需求同时还有很多其他自动化用途。本节的第一个实战演示就是利用 GitHub Actions 保证仓库代码的整洁与规范使用社区提供的github/super-linter动作对代码进行检查。Super-Linter 是一个用 bash 编写的、由多种 linter 组合而成的 GitHub Action用于帮助校验你的源代码。完整的工作流定义如下name: Super-Linter on: push jobs: super-lint: name: Lint code base runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkoutv2 - name: Run Super-Linter uses: github/super-linterv3 env: DEFAULT_BRANCH: main GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}工作流包含两个步骤第一步用actions/checkoutv2检出代码第二步调用github/super-linterv3并通过env传入两个环境变量DEFAULT_BRANCH: main指定默认分支Super-Linter 将基于该分支判断变更内容GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}GitHub 自动注入的令牌。关于 GITHUB_TOKEN 的说明为什么需要GITHUB_TOKEN官方文档的说明是如果在工作流中传递环境变量GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}GitHub Super-Linter 会在 pull request 的 Checks 区域标记每一次独立 linter 运行的状态若不传递则只能看到整体运行状态。重点在于无需手动设置这个 GitHub Secret因为它是 GitHub 自动设置的只需要把它传递给 action 即可。也就是说虽然我们在工作流中使用了它但不需要在仓库里配置任何环境变量或 Secret。创建工作流文件的目录规范要利用 GitHub Actions既可以从仓库上方的 Actions 标签页Tab进入 Marketplace 选择现成动作也可以按照上面的 Super-Linter 代码自行创建文件。自行创建时必须把工作流文件放到仓库中的精确位置.github/workflows/目录下目录名即 workflow 名称应起一个便于识别的名字。一个仓库内可以放置多个工作流文件分别执行不同的 job 和任务。本节演示创建的文件是.github/workflows/super-linter.yml。将上述 YAML 代码粘贴进去并提交到仓库后前往 Actions 标签页即可看到名为 Super-Linter 的工作流被列出。由于我们在on: push中定义了推送到仓库即触发因此仅仅提交super-linter.yml这一动作本身就触发了工作流运行。这意味着工作流文件本身也是仓库代码的一部分提交它即完成首次触发。触发、失败排查与版本升级首次运行后在 Actions 页面可以看到任务失败并报出错误。这与代码本身有关——在真实案例中首次运行还遇到过一个 Super-Linter 自身的 issue即使用github/super-linterv3时出现的已知问题。针对该问题第二次尝试把 Super-Linter 的版本从 3 升级到 4github/super-linterv4后重新运行任务随后出现的就是代码风格问题导致的检查失败。这里有一个非常有价值的操作体验当工作流中的某个步骤失败或返回错误时仓库状态会立即以红色叉号的形式呈现方便开发者第一时间发现 CI 问题。修复代码中的问题例如删除有问题的文件并再次推送后工作流会重新运行直到全部检查通过。当全部步骤通过后仓库页面上会显示绿色对勾表示当前提交的代码通过了 CI 检查。这个提交 → 触发 → 检查 → 反馈的闭环正是 GitHub Actions 作为持续集成工具的核心价值它把质量检查前置到每一次代码变更中且不要求开发者自己搭建 Jenkins 服务器。复用社区资产而不是重复造轮子在 Actions 标签页点击 New workflow 按钮会打开一个包含海量社区动作的入口。整个 90DaysOfDevOps 挑战反复强调的一个理念是不要重复造轮子而是站在巨人的肩膀上共享代码、自动化脚本与技能。github/super-linter就是一个典型例子——它由社区编写维护你只需要在工作流中引用它并传入必要参数就能立刻获得多种 linter 的校验能力这正是 GitHub Actions 生态复用社区资产的体现。小结与下一步以上内容覆盖了 GitHub Actions 的基础知识工作流的概念模型Workflow → Jobs → Steps → Actions → Runners、事件触发机制、YAML 文件结构与目录规范并通过 Super-Linter 完成了从创建、触发、失败排查到成功通过的完整实践。以此为基础你还可以把 GitHub Actions 用于更多自动化任务如标签管理、发布部署、环境配置等。下一节将进入 CD 领域的另一块内容使用 ArgoCD 把应用部署到环境中相关内容可继续阅读 Day 76ArgoCD Overview。本仓库的路线图索引2022/pl/README.md中标注了第 75 天与第 76 天的学习入口方便对照整个 CI/CD 章节的进度。赞分享文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载相关推荐90DaysOfDevOps 第 75 天GitHub Actions 工作流核心概念与 Super-Linter 实战入门90DaysOfDevOps 第 75 天GitHub Actions 工作流核心概念与 Super Linter 实战入门 本指南围绕 90DaysOfDe文档/教程90DaysOfDevOps 实战GitHub Actions 工作流核心概念与 Super-Linter 代码质量门禁90DaysOfDevOps 实战GitHub Actions 工作流核心概念与 Super Linter 代码质量门禁 本文是 90DaysOfDevOps文档/教程90DaysOfDevOps 实战笔记GitHub Actions 从核心概念到代码 Linting 落地Day 7590DaysOfDevOps 实战笔记GitHub Actions 从核心概念到代码 Linting 落地Day 75 导读 本文是 90DaysOfDe文档/教程上一篇终极少样本学习指南如何用有限数据训练高效AI模型下一篇gh_mirrors/we/web-development-resources项目贡献者访谈背后的开发故事创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考