1. 自定义工作流
默认情况下,GitHub Actions 提供了一组预定义的工作流。但是,您可以轻松创建自定义工作流以满足特定需求。例如,以下工作流在每次推送到主分支时触发,运行 lint、测试和部署任务:
name: Node CI/CD
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: "16"
- run: npm install
- run: npm run lint
- run: npm run test
deploy:
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: "16"
- run: npm install
- run: npm run deploy
2. 使用矩阵策略
矩阵策略允许您在一个工作流中运行具有不同变量集的任务。例如,以下工作流在使用 Node.js 的不同版本时运行测试:
name: Node Test Matrix
on: push
jobs:
test:
strategy:
matrix:
node-version: ["12", "14", "16"]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: "${{ matrix.node-version }}"
- run: npm install
- run: npm run test
3. 管理秘密
GitHub Actions 支持通过秘密安全地存储敏感信息,例如密码或密钥。您可以使用 set-secret
操作存储秘密,并使用 get-secret
操作在工作流中访问它们。
name: Secret Manager
on: push
jobs:
manage-secret:
runs-on: ubuntu-latest
steps:
- uses: actions/set-secret@v1
with:
name: my-secret
value: "super-secret-value"
- uses: actions/get-secret@v1
with:
name: my-secret
id: secret-value
- run: echo ${{ secrets.secret-value }}
4. 并行化工作流
GitHub Actions 允许您并行运行工作,从而加快流程。例如,您可以并行运行 lint 和测试任务:
name: Parallel CI
on: push
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: "16"
- run: npm install
- run: npm run lint & npm run test
5. 部署到云平台
GitHub Actions 轻松地集成到各种云平台,包括 AWS、Azure 和 GCP。您可以使用特定平台的操作将应用程序部署到云上。例如,以下工作流将应用程序部署到 AWS EC2:
name: AWS Deployment
on: push
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: "16"
- run: npm install
- run: npm run build
- uses: actions/aws-ec2@v1
with:
access-key-id: "${{ secrets.AWS_ACCESS_KEY_ID }}"
secret-access-key: "${{ secrets.AWS_SECRET_ACCESS_KEY }}"
region: "us-east-1"
instance-type: "t2.micro"
ami: "ami-id"
script: |
sudo apt-get update
sudo apt-get install nginx
sudo service nginx start
6. 集成第三方工具
GitHub Actions 支持与各种第三方工具集成,包括数据库、消息队列和监控系统。您可以使用特定的操作连接到这些工具并在工作流中使用它们。例如,以下工作流使用 MongoDB 操作将数据导入数据库:
name: MongoDB Integration
on: push
jobs:
import-data:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: "16"
- run: npm install
- run: npm run build
- uses: actions/mongodb-data-api@v1
with:
uri: "${{ secrets.MONGODB_URI }}"
database: "my-database"
collection: "my-collection"
payload: "@/data.json"
7. 自定义缓存
GitHub Actions 缓存机制可以存储构建工件,从而加快后续运行。您可以自定义缓存键以控制缓存的内容。例如,以下工作流仅缓存 node_modules
目录:
name: Custom Cache
on: push
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
with:
path: node_modules
key: ${{ runner.os }}-node-modules-${{ hashFiles("**/package-lock.json") }}
- uses: actions/setup-node@v2
with:
node-version: "16"
- run: npm install
- run: npm run test
8. 故障处理和重试
GitHub Actions 提供了强大的故障处理和重试功能。您可以使用 try/catch
语句处理错误,并使用 retry
操作重试失败的任务。
name: Fault Handling
on: push
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- try:
steps:
- uses: actions/setup-node@v2
with:
node-version: "16"
- run: npm install
- run: npm run test
- catch:
steps:
- run: echo "Test failed"
- fail
- retry:
attempts: 3
steps:
- run: echo "Retrying..."
- run: npm run test
9. 使用 GitHub Events
GitHub Actions 与 GitHub 事件紧密集成。您可以触发工作流的特定动作,例如推送、提交、发布或问题创建。
name: Event Trigger
on:
push:
branches:
- master
pull_request:
branches:
- main
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: "16"
- run: npm install
- run: npm run test
10. 自定义输出
GitHub Actions 允许您自定义工作流输出。这对于与其他工具和服务集成或保存要用于后续步骤的数据非常有用。
name: Custom Output
on: push
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: "16"
- run: npm install
- run: npm run test
outputs:
test-results: ${{ steps.test.outputs.test-results }}
jobs:
report:
needs: ci
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: echo ${{ needs.ci.outputs.test-results }}
通过利用这些 Node.js GitHub Actions 进阶技术,您可以自动化软件开发管道,提高效率并确保代码质量。