CI 集成

返回构建工具

在 CI 环境中运行构建工具,实现自动化编译、测试、打包和发布。


GitHub Actions

Maven 项目

# .github/workflows/build.yml
name: Build
 
on: [push, pull_request]
 
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
 
      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'
          cache: maven             # 缓存 ~/.m2
 
      - name: Build
        run: mvn -B package --no-transfer-progress
 
      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: app-jar
          path: target/*.jar

Gradle 项目

name: Build
 
on: [push, pull_request]
 
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
 
      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'
          cache: gradle            # 缓存 ~/.gradle
 
      - name: Build
        run: ./gradlew build
 
      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: app-jar
          path: build/libs/*.jar

Jenkins

Maven Pipeline

// Jenkinsfile
pipeline {
    agent any
    tools {
        jdk 'JDK17'
        maven 'Maven3'
    }
    stages {
        stage('Build') {
            steps { sh 'mvn -B clean package -DskipTests' }
        }
        stage('Test') {
            steps { sh 'mvn -B test' }
            post {
                always { junit 'target/surefire-reports/*.xml' }
            }
        }
        stage('Deploy') {
            when { branch 'main' }
            steps { sh 'mvn -B deploy -P prod' }
        }
    }
}

Gradle Pipeline

pipeline {
    agent any
    stages {
        stage('Build') {
            steps { sh './gradlew clean build' }
        }
        stage('Test') {
            steps { sh './gradlew test' }
            post {
                always { junit 'build/test-results/**/*.xml' }
            }
        }
        stage('Publish') {
            when { branch 'main' }
            steps { sh './gradlew publish' }
        }
    }
}

CI 最佳实践

依赖缓存

# GitHub Actions 手动配置 Maven 缓存
- uses: actions/cache@v4
  with:
    path: ~/.m2/repository
    key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
    restore-keys: ${{ runner.os }}-maven-

跳过测试

mvn package -DskipTests          # 跳过测试执行(仍编译)
./gradlew build -x test          # Gradle 跳过 test task

私服凭据注入

凭据通过 CI 环境变量注入,不写入代码:

env:
  NEXUS_USER: ${{ secrets.NEXUS_USER }}
  NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
mvn deploy -s settings.xml       # settings.xml 从环境变量读取凭据

相关文档