diff --git a/Jenkinsfile b/Jenkinsfile index 8b6beb0..7a24c6e 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -7,9 +7,7 @@ pipeline { timestamps() } - tools { - go 'go' // 使用Jenkins配置的Go工具 - } + environment { // 目标服务器配置 @@ -51,15 +49,12 @@ pipeline { echo '🔍 检查构建环境...' script { sh ''' - echo "=== Go版本 ===" - go version - - echo "=== Go环境信息 ===" - go env - echo "=== Docker版本 ===" docker --version + echo "=== Go版本(Docker中) ===" + docker run --rm golang:1.21-alpine go version + echo "=== 工作目录 ===" pwd && ls -la ''' @@ -73,14 +68,17 @@ pipeline { steps { echo '📦 下载Go依赖...' sh ''' - echo "下载依赖..." - go mod download - - echo "验证依赖..." - go mod verify - - echo "整理依赖..." - go mod tidy + echo "使用Docker容器管理Go依赖..." + docker run --rm -v "$(pwd)":/workspace -w /workspace golang:1.21-alpine sh -c " + echo '下载依赖...' + go mod download + + echo '验证依赖...' + go mod verify + + echo '整理依赖...' + go mod tidy + " echo "✅ 依赖管理完成" ''' @@ -91,15 +89,18 @@ pipeline { steps { echo '🔍 运行Go代码检查...' sh ''' - echo "运行go vet..." - go vet ./... - - echo "运行go fmt检查..." - if [ "$(gofmt -l . | wc -l)" -gt 0 ]; then - echo "❌ 代码格式不正确,需要运行 go fmt" - gofmt -l . - exit 1 - fi + echo "使用Docker容器进行代码检查..." + docker run --rm -v "$(pwd)":/workspace -w /workspace golang:1.21-alpine sh -c " + echo '运行go vet...' + go vet ./... + + echo '运行go fmt检查...' + if [ \$(gofmt -l . | wc -l) -gt 0 ]; then + echo '❌ 代码格式不正确,需要运行 go fmt' + gofmt -l . + exit 1 + fi + " echo "✅ 代码检查通过" ''' @@ -110,14 +111,17 @@ pipeline { steps { echo '🧪 运行单元测试...' sh ''' - echo "运行测试并生成覆盖率报告..." - go test -v -race -coverprofile=coverage.out -covermode=atomic ./... - - echo "生成HTML覆盖率报告..." - go tool cover -html=coverage.out -o coverage.html - - echo "显示覆盖率统计..." - go tool cover -func=coverage.out + echo "使用Docker容器运行测试..." + docker run --rm -v "$(pwd)":/workspace -w /workspace golang:1.21-alpine sh -c " + echo '运行测试并生成覆盖率报告...' + go test -v -race -coverprofile=coverage.out -covermode=atomic ./... + + echo '生成HTML覆盖率报告...' + go tool cover -html=coverage.out -o coverage.html + + echo '显示覆盖率统计...' + go tool cover -func=coverage.out + " ''' } post { @@ -181,10 +185,13 @@ EOF steps { echo '🔨 编译Go应用程序...' sh ''' - echo "开始编译..." - CGO_ENABLED=0 GOOS=linux go build \\ - -ldflags="-w -s -X main.gitCommit=${GIT_COMMIT_SHORT}" \\ - -o golang-demo . + echo "使用Docker容器编译Go应用..." + docker run --rm -v "$(pwd)":/workspace -w /workspace golang:1.21-alpine sh -c " + echo '开始编译...' + CGO_ENABLED=0 GOOS=linux go build \\ + -ldflags='-w -s -X main.gitCommit=${GIT_COMMIT_SHORT}' \\ + -o golang-demo . + " echo "验证二进制文件..." ls -lh golang-demo @@ -403,21 +410,12 @@ EOF script { echo '🧹 清理工作空间...' try { - // 清理Go构建产物 - sh ''' - rm -f golang-demo - rm -f coverage.out coverage.html - rm -f sonar-project.properties - ''' + // 清理Go构建产物 + sh 'rm -f golang-demo coverage.out coverage.html sonar-project.properties || true' // 清理Docker资源 - sh ''' - # 清理未使用的镜像 - docker image prune -f || true - - # 清理构建缓存 - docker builder prune -f || true - ''' + sh 'docker image prune -f || true' + sh 'docker builder prune -f || true' } catch (Exception e) { echo "⚠️ 清理失败: ${e.getMessage()}" } @@ -428,9 +426,9 @@ EOF script { echo '✅ 流水线执行成功!' - def deployPort = '15020' + def deployPort = '15021' if (env.BRANCH_NAME == 'develop' || env.BRANCH_NAME?.startsWith('feature/')) { - deployPort = '15021' + deployPort = '15022' } def message = """ @@ -467,10 +465,8 @@ EOF echo message // 清理可能的测试容器 - sh ''' - docker stop test-${BUILD_NUMBER} || true - docker rm test-${BUILD_NUMBER} || true - ''' + sh "docker stop test-${BUILD_NUMBER} || true" + sh "docker rm test-${BUILD_NUMBER} || true" } }