Skip to content

GitHub Actions 实战

GitHub Actions 是一个强大的持续集成和持续交付(CI/CD)平台,允许你自动化软件开发工作流程。下面是一些基础概念以及如何在实际项目中使用它。

基础概念

  • Workflow(工作流):定义一系列任务的YAML文件,存储在仓库的.github/workflows目录下。
  • Job(作业):工作流中的一个步骤集合,它们可以并行或顺序执行。
  • Step(步骤):构成作业的基本单元,可能是一个shell脚本或者一个动作(Action)。
  • Action(动作):可复用的代码单元,简化了构建、测试和部署过程。

示例:创建一个简单的CI工作流

假设我们有一个Node.js项目,我们可以创建一个简单的CI工作流来自动运行测试:

  1. 在你的仓库根目录下创建.github/workflows/nodejs.yml文件。
  2. 添加以下内容到文件中:
yaml
name: Node.js CI

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [14.x, 16.x]

    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js $\{\{ matrix.node-version \}\}
      uses: actions/setup-node@v3
      with:
        node-version: $\{\{ matrix.node-version \}\}
    - run: npm ci
    - run: npm run build --if-present
    - run: npm test

这个配置会在推送或拉取请求到main分支时触发,针对不同版本的Node.js运行测试。

Gitee平台上的GitHub Actions镜像标签策略

虽然Gitee是主要面向中国的代码托管平台,并且支持Git操作,但默认情况下它并不直接支持GitHub Actions。然而,可以通过一些方式将GitHub Actions的工作流迁移到Gitee上使用,比如通过自建Runner或者其他CI/CD服务如Jenkins等。

关于容器镜像标签策略,无论是GitHub Actions还是任何其他CI/CD系统,推荐的最佳实践都是相似的:

  • 避免使用latest标签:因为这会导致不可追溯性和潜在的版本混乱问题。
  • 使用Git SHA或语义化版本:例如v1.2.3-$\{sha\}不仅提供了版本信息,还能具体定位到某次提交,便于回溯和排查问题。
  • 使用Digests(摘要):这是最精确的标识方法,例如sha256:abc...,确保每次拉取的镜像完全一致,不受标签变动影响。

例如,在GitHub Actions的工作流中指定确切的Docker镜像版本:

yaml
- name: Set up Docker Buildx
  uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
  uses: docker/login-action@v1 
  with:
    username: $\{\{ secrets.DOCKER_USERNAME \}\}
    password: $\{\{ secrets.DOCKER_PASSWORD \}\}
- name: Build and push
  uses: docker/build-push-action@v2
  with:
    context: .
    push: true
    tags: user/app:v1.2.3-$\{\{ github.sha \}\}

这里通过$\{github.sha\}变量将Git的SHA值包含进镜像标签中,从而保证了镜像的唯一性和可追溯性。对于Gitee平台,同样的原则适用,尽管需要根据具体的CI/CD工具进行相应的调整。