本文目录导读:

- GitHub Actions(.github/workflows/*.yml)
- GitLab CI/CD(.gitlab-ci.yml)
- Jenkins(Jenkinsfile)
- CircleCI(.circleci/config.yml)
- 通用配置模式(适合任何 CI 工具)
- 最佳实践提示
在脚本中配置持续集成(CI)流水线,通常需要根据你使用的 CI 工具(如 GitHub Actions、GitLab CI/CD、Jenkins、CircleCI 等)来编写对应的配置文件,下面以几种主流工具为例,说明如何在脚本(YAML 或 Jenkinsfile)中配置 CI 流水线。
GitHub Actions(.github/workflows/*.yml)
GitHub Actions 的流水线文件放在仓库的 .github/workflows/ 目录下,以 YAML 格式编写。
示例:Node.js 项目的 CI 流水线
name: Node.js CI
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
build-and-test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16, 18, 20]
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- run: npm ci
- run: npm run build --if-present
- run: npm test
- name: Upload test coverage
uses: actions/upload-artifact@v4
if: always()
with:
name: coverage-report
path: coverage/
关键配置说明:
on:触发条件(push、PR 等)jobs:定义多个任务(可并行或依赖)runs-on:运行环境(ubuntu、windows、macOS)steps:每个任务的具体步骤matrix:矩阵构建(多版本测试)
GitLab CI/CD(.gitlab-ci.yml)
GitLab 的 CI 配置文件位于项目根目录,名为 .gitlab-ci.yml。
示例:Python 项目的 CI 流水线
stages:
- build
- test
- deploy
variables:
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
cache:
paths:
- .cache/pip/
before_script:
- python --version
- pip install -r requirements.txt
build-job:
stage: build
script:
- echo "Building the project..."
- python setup.py build
test-job:
stage: test
script:
- echo "Running tests..."
- pytest --cov=src tests/
artifacts:
reports:
coverage_report:
coverage_format: cobertura
path: coverage.xml
deploy-job:
stage: deploy
script:
- echo "Deploying to production..."
only:
- main
关键配置说明:
stages:定义流水线阶段(顺序执行)variables:全局环境变量cache:缓存依赖,加速构建artifacts:保存构建产物或测试报告only/except:分支或标签过滤
Jenkins(Jenkinsfile)
Jenkins 使用 Jenkinsfile(Groovy 脚本)定义流水线,可以声明式或脚本式。
示例:声明式流水线(Declarative Pipeline)
pipeline {
agent any
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Build') {
steps {
sh 'make build'
}
}
stage('Test') {
steps {
sh 'make test'
}
post {
success {
junit 'reports/**/*.xml'
}
failure {
echo 'Tests failed!'
}
}
}
stage('Deploy') {
when {
branch 'main'
}
steps {
sh 'make deploy'
}
}
}
post {
always {
cleanWs()
}
}
}
关键配置说明:
agent:指定运行节点(any、docker、label)stages:阶段定义steps:每个阶段的具体命令when:条件执行(如仅 main 分支部署)post:后处理(成功/失败通知、清理等)
CircleCI(.circleci/config.yml)
CircleCI 配置文件位于 .circleci/config.yml。
示例:Java/Maven 项目的 CI
version: 2.1
orbs:
maven: circleci/maven@1.4
workflows:
main:
jobs:
- maven/test:
name: unit-tests
context: maven-settings
pre-steps:
- checkout
test_command: mvn test
post-steps:
- store_test_results:
path: target/surefire-reports
- maven/deploy:
name: deploy-snapshot
requires:
- unit-tests
filters:
branches:
only: main
关键配置说明:
orbs:复用社区或官方 orb(简化配置)workflows:定义流水线编排jobs:具体任务定义requires:任务依赖关系filters:分支/标签过滤
通用配置模式(适合任何 CI 工具)
无论使用哪种工具,一个典型的 CI 流水线脚本通常包含以下步骤:
# 1. 环境准备 checkout code setup dependencies (install packages, restore NuGet, etc.) # 2. 构建 build the project (compile, bundle, etc.) # 3. 代码质量检查 lint, static analysis, formatting check # 4. 测试 run unit tests run integration tests run security scans # 5. 产物打包 package artifacts (Docker image, ZIP, installer) # 6. 部署(可选) deploy to staging/production environment # 7. 通知 send notifications (Slack, email, etc.)
最佳实践提示
- 流水线即代码:将 CI 配置脚本与代码一同版本控制。
- 分阶段执行:将构建、测试、部署分离,便于定位问题。
- 并行化:利用矩阵或并行 job 加速测试(多版本、多平台)。
- 缓存依赖:缓存 npm、pip、Maven 等包管理器缓存,加速构建。
- 错误处理:设置超时、重试、失败通知。
- 安全敏感信息:使用 CI 工具提供的 secrets 管理功能,切勿硬编码。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播