GitHub Actions 实战
GitHub Actions 是一个强大的持续集成和持续交付(CI/CD)平台,允许你自动化软件开发工作流程。下面是一些基础概念以及如何在实际项目中使用它。
基础概念
- Workflow(工作流):定义一系列任务的YAML文件,存储在仓库的
.github/workflows目录下。 - Job(作业):工作流中的一个步骤集合,它们可以并行或顺序执行。
- Step(步骤):构成作业的基本单元,可能是一个shell脚本或者一个动作(Action)。
- Action(动作):可复用的代码单元,简化了构建、测试和部署过程。
示例:创建一个简单的CI工作流
假设我们有一个Node.js项目,我们可以创建一个简单的CI工作流来自动运行测试:
- 在你的仓库根目录下创建
.github/workflows/nodejs.yml文件。 - 添加以下内容到文件中:
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工具进行相应的调整。