为了账号安全,请及时绑定邮箱和手机立即绑定

Github Actions实战:新手入门及初级教程

概述

本文详细介绍了Github Actions的工作原理,包括事件触发、作业执行和任务定义,帮助新手快速入门。通过具体示例,展示了如何创建和配置工作流文件,涵盖构建、测试和部署等常见任务。此外,文章还提供了高级用法和实战技巧,如并行测试和自托管运行器的使用,进一步提升开发效率。

Github Actions 实战:新手入门及初级教程
Github Actions 简介

什么是 Github Actions

Github Actions 是 GitLab CI 和 Travis CI 之后的又一个 CI/CD 工具,它允许用户在 Github 上直接定义和执行自动化任务。Github Actions 提供了从代码提交到生产部署的完整自动化流程。任务可以是构建、测试、部署,也可以是其他任意操作。每个任务都可以通过工作流文件来定义,并且可以与其他 Github 内部和外部的服务进行集成。

Github Actions 的作用和优势

1. 自动化构建

Github Actions 可以自动构建项目,包括编译代码和生成静态网站。这对于频繁修改代码的开发者来说非常实用,能够确保每次提交代码后都能自动构建出最新的版本。

2. 自动化测试

开发者可以配置 Github Actions 来运行单元测试、集成测试和端到端测试,确保每次更改不会引入新的 bug。这有助于维护代码质量,并加快开发速度。

3. 自动化部署

部署是开发流程中的重要步骤,Github Actions 可以将代码部署到云端服务器、运行容器或静态网站,保证软件的最新版本能够及时更新。

4. 集成度高

由于 Github Actions 是与 Github 无缝集成的,因此可以方便地利用 Github 提供的各种服务,如仓库管理、代码审查等。同时,它也支持第三方服务的集成,能够满足多样化的开发需求。

Github Actions 的工作原理

在 Github Actions 中,工作流(Workflow)是核心概念。工作流由若干作业(Job)组成,每个作业定义了要执行的任务(Step)。工作流文件是由 YAML 格式的文件定义的,通常放在项目的 .github/workflows 目录下。

  • 事件触发:每个工作流都可以由特定的事件触发,如代码推送、pull request 事件、issue 事件等。
  • 作业执行:每个作业可以在不同的运行器(Runner)上执行,运行器可以是操作系统运行环境。例如,一个作业可以在 Ubuntu 系统上运行,另一个作业可以在 Windows 系统上运行。
  • 任务执行:每个任务由一系列命令组成,这些命令可以是 shell 命令、脚本或调用其他服务。
快速入门 Github Actions

Github Actions 的基本概念

事件(Event):Github Actions 通过事件触发工作流的执行,事件可以是 push、pull request、issue、schedule 等。例如,每次代码推送后,都会触发一个构建工作流来自动构建代码。

工作流(Workflow):工作流文件定义了自动化任务的具体流程,这些任务可以是构建、测试、部署等。工作流文件的格式是 YAML,通常放在项目的 .github/workflows 目录下。

作业(Job):作业是工作流中的一个组件,它定义了要执行的具体任务。每个作业可以运行在特定的操作系统环境中,比如 Ubuntu、Windows 或 macOS。

任务(Step):任务是作业中最小的可执行单元,它由一系列命令组成,这些命令可以是 shell 命令、调用脚本或调用其他服务。

如何创建第一个 Workflow

  1. 创建一个新的文件 .github/workflows/my-first-workflow.yml
  2. 在文件中定义一个简单的构建任务,例如下面的示例代码:
name: My First Workflow
on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Check out the repository
      uses: actions/checkout@v2
    - name: Run a script
      run: echo "Hello, World!"

该工作流文件定义了一个名为 My First Workflow 的工作流,它在每次代码推送时都会执行一个作业 build。作业中包含两个步骤:一个是检查出代码仓库,另一个是运行一个简单的 shell 命令 echo "Hello, World!"

Github Actions 的文件结构

在 Github Actions 中,推荐将工作流文件放在项目的 .github/workflows 目录下。例如,一个典型的 .github/workflows 目录结构如下:

.github/
    workflows/
        ci.yml
        cd.yml
        pr.yml

其中,ci.yml 是用于持续集成的工作流文件,cd.yml 用于持续部署,pr.yml 用于处理 pull request。这种结构有助于将不同的工作流文件分开管理,便于阅读和维护。

Github Actions 的配置和使用

使用环境变量

环境变量可以用来存储敏感信息,如数据库密码、API 密钥等。可以通过 envsecrets 关键字来设置环境变量。

示例代码

name: Example
on: [push]

env:
  NODE_ENV: production
  API_KEY: ${{ secrets.API_KEY }}

jobs:
  example:
    runs-on: ubuntu-latest
    steps:
    - name: Check out the repository
      uses: actions/checkout@v2
    - name: Print environment variables
      run: |
        echo "Node Env: $NODE_ENV"
        echo "API Key: $API_KEY"

该工作流文件定义了一个名为 Example 的工作流,它在每次代码推送时都会执行一个作业 example。作业中包含两个步骤:检查出代码仓库和打印环境变量。

运行不同操作系统的作业

通过配置不同的运行器,可以在不同的操作系统上执行作业。例如,可以在 Ubuntu、Windows 或 macOS 上运行作业。

示例代码

name: Cross Platform Build
on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Check out the repository
      uses: actions/checkout@v2
    - name: Build for Ubuntu
      run: echo "Building for Ubuntu"

  test:
    runs-on: windows-latest
    steps:
    - name: Check out the repository
      uses: actions/checkout@v2
    - name: Test on Windows
      run: echo "Testing on Windows"

  deploy:
    runs-on: macos-latest
    steps:
    - name: Check out the repository
      uses: actions/checkout@v2
    - name: Deploy on macOS
      run: echo "Deploying on macOS"

该工作流文件定义了一个名为 Cross Platform Build 的工作流,它在每次代码推送时都会执行三个作业:buildtestdeploy。每个作业都在不同的操作系统上运行:build 在 Ubuntu 上运行,test 在 Windows 上运行,deploy 在 macOS 上运行。

利用第三方服务扩展功能

Github Actions 可以轻松地集成第三方服务,如发送通知、存储构建工件等。例如,可以使用 actions/upload-artifact 来上传构建工件。

示例代码

name: Upload Artifact
on: [push]

jobs:
  build-and-upload:
    runs-on: ubuntu-latest
    steps:
    - name: Check out the repository
      uses: actions/checkout@v2
    - name: Build project
      run: |
        mkdir build
        echo "Building project in build directory"
    - name: Upload build artifact
      uses: actions/upload-artifact@v2
      with:
        name: build-artifact
        path: build

该工作流文件定义了一个名为 Upload Artifact 的工作流,它在每次代码推送时都会执行一个作业 build-and-upload。作业中包含三个步骤:检查出代码仓库、构建项目和上传构建工件。

Github Actions 的高级用法

工作流共享和复用

通过定义 reusable workflows,可以将频繁使用的任务定义为公共工作流,并在其他工作流中引用。这种方式可以简化工作流文件的管理和维护。

示例代码

在文件 .github/workflows/reusable-workflow.yml 中定义一个可重用的工作流:

name: Reusable Workflow
on:
  workflow_call:

jobs:
  check-requirements:
    runs-on: ubuntu-latest
    steps:
    - name: Check out the repository
      uses: actions/checkout@v2
    - name: Install dependencies
      run: npm ci

在其他工作流文件中引用该工作流:

name: Main Workflow
on: [push]

jobs:
  main-job:
    runs-on: ubuntu-latest
    steps:
    - name: Run reusable workflow
      uses: ./.github/workflows/reusable-workflow.yml

利用事件触发器

除了默认的事件触发器,还可以自定义事件触发器,以满足更复杂的触发条件。例如,可以使用 schedule 关键字来定期执行工作流。

示例代码

在工作流文件中定义一个定时任务:

name: Scheduled Workflow
on:
  schedule:
    - cron: '0 0 * * *' # 每天午夜执行

jobs:
  nightly-build:
    runs-on: ubuntu-latest
    steps:
    - name: Check out the repository
      uses: actions/checkout@v2
    - name: Run nightly build
      run: echo "Running nightly build"

该工作流文件定义了一个名为 Scheduled Workflow 的工作流,它会在每天午夜执行一个作业 nightly-build,以运行夜间构建任务。

维护和调试工作流

为了提高工作流的可维护性,可以使用 loggingdebug 选项来输出调试信息,以便于排查问题。

示例代码

在工作流文件中添加调试信息:

name: Debug Workflow
on: [push]

jobs:
  debug-job:
    runs-on: ubuntu-latest
    steps:
    - name: Check out the repository
      uses: actions/checkout@v2
    - name: Run debug script
      run: |
        echo "Debugging information:"
        echo "VAR1=${VAR1}"
        echo "VAR2=${VAR2}"

该工作流文件定义了一个名为 Debug Workflow 的工作流,它在每次代码推送时都会执行一个作业 debug-job,以输出调试信息。

Github Actions 实战技巧

最佳实践和常见问题

1. 使用 matrix 进行并行测试

通过 matrix,可以并行运行多个作业来加速测试。

示例代码

name: Parallel Test
on: [push]

jobs:
  test:
    strategy:
      matrix:
        node-version: [12.x, 14.x]
    runs-on: ubuntu-latest
    steps:
    - name: Check out the repository
      uses: actions/checkout@v2
    - name: Setup Node.js
      uses: actions/setup-node@v2
      with:
        node-version: ${{ matrix.node-version }}
    - name: Test
      run: npm test

该工作流文件定义了一个名为 Parallel Test 的工作流,它在每次代码推送时都会执行一个作业 test。作业通过 matrix 并行运行多个版本的 Node.js 来测试。

2. 使用 self-hosted runners 自定义运行器

使用自托管运行器可以更好地控制运行环境和资源。

示例代码

name: Self-Hosted Runner
on: [push]

jobs:
  build:
    runs-on: self-hosted
    steps:
    - name: Check out the repository
      uses: actions/checkout@v2
    - name: Build
      run: echo "Building on a self-hosted runner"

该工作流文件定义了一个名为 Self-Hosted Runner 的工作流,它在每次代码推送时都会执行一个作业 build,并且该作业在自托管运行器上运行。

效率提升的小技巧

1. 使用 actions/cache 缓存依赖

使用 actions/cache 可以缓存依赖包,减少下载和构建时间。

示例代码

name: Cache Dependencies
on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Check out the repository
      uses: actions/checkout@v2
    - name: Cache dependencies
      uses: actions/cache@v2
      with:
        path: ~/.npm
        key: ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }}
        restore-keys: |
          ${{ runner.os }}-node-modules-
    - name: Install dependencies
      run: npm ci
    - name: Build
      run: npm run build

该工作流文件定义了一个名为 Cache Dependencies 的工作流,它在每次代码推送时都会执行一个作业 build。作业中包含三个步骤:检查出代码仓库、缓存依赖包和安装和构建依赖。

2. 限制并发作业数量

通过 concurrency 限制并发作业数量,避免资源竞争。

示例代码

name: Limit Concurrency
on: [push]

jobs:
  build:
    concurrency: ${{ github.ref }}-${{ github.actor }}
    runs-on: ubuntu-latest
    steps:
    - name: Check out the repository
      uses: actions/checkout@v2
    - name: Build
      run: echo "Building"

该工作流文件定义了一个名为 Limit Concurrency 的工作流,它在每次代码推送时都会执行一个作业 build。通过 concurrency 限制了作业的并发数量。

学习和参考资源推荐

  • 慕课网:慕课网提供了丰富的在线课程和教程,包括 Github Actions 的入门和进阶课程。
  • 官方文档:Github Actions 的官方文档详细介绍了各种用法和配置选项,是学习和参考的重要资源。
  • 社区论坛:Github 社区和 Stack Overflow 等论坛上有大量关于 Github Actions 的讨论和案例分享,可以帮助解决实际问题。

总的来说,Github Actions 是一个强大且灵活的 CI/CD 平台,通过合理配置和使用,可以大大提高软件开发的效率和质量。希望本文能够帮助你快速入门和深入了解 Github Actions。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消