本文详细介绍了Github Actions的基本概念、使用场景和配置教程,帮助读者掌握如何高效地使用这一持续集成和持续交付(CI/CD)工具。
Github Actions 是一个持续集成和持续交付(CI/CD)工具,允许用户自动执行构建、测试和部署等任务。它允许开发人员在代码仓库中定义一系列自动化任务,这些任务会在特定事件触发时自动执行。例如,每当代码被推送或合并到特定分支时,可以自动执行构建和测试任务,确保代码的质量。
一个 Workflow 是一个定义了如何执行的纯文本文件,其文件扩展名为 .yml
。每个 Workflow 文件定义了一系列 Job,这些 Job 会在某个特定事件触发时执行。例如,当代码被推送到主分支时,可以触发一个构建和测试的 Workflow。
示例代码:
name: Build on: [push] jobs: build: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: '14.x' - name: Install dependencies run: npm install - name: Build run: npm run build
Job 是 Workflow 的组成部分,它定义了一系列需要执行的步骤。每个 Job 可以在不同的运行器上执行,运行器可以是操作系统或特定的环境。Job 之间可以依赖,也可以并行执行。
示例代码:
name: Build on: [push] jobs: build: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: '14.x' - name: Install dependencies run: npm install - name: Build run: npm run build
Step 是 Job 的组成部分,它定义了单个任务的执行方式。每个 Step 可以执行一个命令或运行一个脚本。Step 之间可以通过环境变量进行通信,前一个 Step 的输出可以作为后一个 Step 的输入。
示例代码:
name: Build on: [push] jobs: build: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: '14.x' - name: Install dependencies run: npm install - name: Build run: npm run build
Action 是一个可以执行的函数,可以是内置的或第三方的。内置 Action 是由 Github 提供的通用 Action,可以用于通用的任务,如构建、测试、部署等。第三方 Action 是由社区提供或自定义的,可以满足更复杂的需求。Action 可以在 Step 中调用,用于执行特定的任务。
自动化构建是 Github Actions 最常见的应用场景之一。通过配置 Workflow,可以在代码提交后自动执行构建任务,确保代码的编译和打包过程是自动化的和一致的。这对于维护复杂项目非常重要,特别是当项目中包含多个模块和依赖时。
示例代码:
name: Build on: [push] jobs: build: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: '14.x' - name: Install dependencies run: npm install - name: Build run: npm run build
自动化测试是确保代码质量的重要步骤。通过配置 Workflow,可以在代码提交后自动执行测试任务,确保代码的质量。这包括单元测试、集成测试和端到端测试等。
示例代码:
name: Test on: [push] jobs: test: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: '14.x' - name: Install dependencies run: npm install - name: Run tests run: npm test
自动化部署是将构建好的应用部署到生产环境的过程。通过配置 Workflow,可以在代码提交后自动执行部署任务,确保应用的部署是自动化的和一致的。这可以减少人为错误,提高部署的可靠性。
示例代码:
name: Deploy on: [push] jobs: deploy: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: '14.x' - name: Install dependencies run: npm install - name: Build run: npm run build - name: Deploy to production run: | echo "Deploying to production..." # 部署命令示例 npm run deploy
创建第一个 Workflow 需要创建一个新的纯文本文件,文件名以 .yml
结尾,例如 ci.yml
。该文件应放在代码仓库的根目录下,或在 .github/workflows
目录中。
示例代码:
name: CI on: [push] jobs: build: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: '14.x' - name: Install dependencies run: npm install - name: Run tests run: npm test
Github Actions 提供了许多内置的 Action,可以用于常见的任务,如构建、测试和部署。开发人员也可以使用第三方 Action,这些 Action 是由社区提供的,可以满足更复杂的需求。
使用内置Action示例:
name: CI on: [push] jobs: build: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: '14.x' - name: Install dependencies run: npm install - name: Run tests run: npm test
使用第三方Action示例:
name: CI on: [push] jobs: build: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: '14.x' - name: Install dependencies run: npm install - name: Run tests run: npm test - name: Deploy to production uses: actions/deploy-to-production@v1 with: token: ${{ secrets.PRODUCTION_TOKEN }} url: https://example.com/deploy
调试 Workflow 是确保 Workflow 正确执行的重要步骤。可以通过查看 Workflow 的日志来了解 Workflow 的执行情况,日志中包含了 Workflow 的执行状态、输出和错误信息。
查看日志示例:
环境变量是 Workflow 中的重要组成部分,可以用于传递参数和配置信息。环境变量可以在 Workflow 文件中定义,也可以通过 Secrets 传递。
示例代码:
name: CI on: [push] env: NODE_ENV: development API_URL: https://api.example.com jobs: build: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: '14.x' - name: Install dependencies run: npm install - name: Run tests run: npm test
Secrets 是一种特殊类型的环境变量,用于安全地存储敏感信息,如 API 密钥和密码等。Secrets 可以在 Github 仓库的 Settings 中定义,然后在 Workflow 文件中使用。
示例代码:
name: CI on: [push] jobs: build: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: '14.x' - name: Install dependencies run: npm install - name: Run tests run: npm test - name: Deploy to production uses: actions/deploy-to-production@v1 with: token: ${{ secrets.PRODUCTION_TOKEN }} url: https://example.com/deploy
接下来,我们将通过一个实际案例来展示如何使用 Github Actions 自动化构建和测试一个 Node.js 项目。
项目结构:
my-node-app/ ├── .github/ │ └── workflows/ │ └── ci.yml ├── package.json ├── src/ │ └── index.js └── tests/ └── index.test.js
Workflow 文件:ci.yml
name: CI on: [push] jobs: build: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: '14.x' - name: Install dependencies run: npm install - name: Run tests run: npm test
package.json
{ "name": "my-node-app", "version": "1.0.0", "scripts": { "test": "jest" }, "dependencies": { "express": "^4.17.1" }, "devDependencies": { "jest": "^26.6.3" } }
src/index.js
const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hello, World!'); }); module.exports = app;
tests/index.test.js
const request = require('supertest'); const app = require('../src/index'); describe('App', () => { it('should GET /', async () => { const res = await request(app).get('/'); expect(res.status).toBe(200); expect(res.text).toBe('Hello, World!'); }); });
运行流程:
on
字段是否正确配置,确保触发事件和分支匹配。if
条件语句:可以根据条件控制步骤的执行。
steps:
env
和 secrets
:确保敏感信息的安全存储和传递。
env: API_URL: ${{ secrets.API_URL }}
steps:
使用 jobs
并行执行:可以并行执行多个任务,提高效率。
jobs: build: runs-on: ubuntu-latest steps: [...] test: runs-on: ubuntu-latest steps: [...]
outputs
参数传递结果:可以在一个 Job 中生成结果,并传递给其他 Job 或 Step。
steps:
name: Get application version
id: version
run: echo "::set-output name=version::v1.0.0"
通过这些技巧和示例,可以更好地理解和使用 Github Actions,构建高效和可靠的自动化工作流。