修改go环境在docker

This commit is contained in:
wangtianqi 2025-06-25 14:10:52 +08:00
parent 60fcec6994
commit 8a94fa8690

74
Jenkinsfile vendored
View File

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