脚本中持续集成流水线如何配置

wen 实用脚本 8

本文目录导读:

脚本中持续集成流水线如何配置

  1. GitHub Actions(.github/workflows/*.yml)
  2. GitLab CI/CD(.gitlab-ci.yml)
  3. Jenkins(Jenkinsfile)
  4. CircleCI(.circleci/config.yml)
  5. 通用配置模式(适合任何 CI 工具)
  6. 最佳实践提示

在脚本中配置持续集成(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.)

最佳实践提示

  1. 流水线即代码:将 CI 配置脚本与代码一同版本控制。
  2. 分阶段执行:将构建、测试、部署分离,便于定位问题。
  3. 并行化:利用矩阵或并行 job 加速测试(多版本、多平台)。
  4. 缓存依赖:缓存 npm、pip、Maven 等包管理器缓存,加速构建。
  5. 错误处理:设置超时、重试、失败通知。
  6. 安全敏感信息:使用 CI 工具提供的 secrets 管理功能,切勿硬编码

抱歉,评论功能暂时关闭!