修改go配置

This commit is contained in:
wangtianqi 2025-06-25 15:08:31 +08:00
parent ab99ae7641
commit b433e690b6

167
Jenkinsfile vendored
View File

@ -7,7 +7,9 @@ pipeline {
timestamps() timestamps()
} }
tools {
go 'go' // 使用Jenkins手动配置的Go工具
}
environment { environment {
// 目标服务器配置 // 目标服务器配置
@ -49,12 +51,15 @@ 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
''' '''
@ -68,64 +73,14 @@ pipeline {
steps { steps {
echo '📦 下载Go依赖...' echo '📦 下载Go依赖...'
sh ''' sh '''
echo "工作空间路径: ${WORKSPACE}" echo "下载依赖..."
echo "检查go.mod文件存在性:" go mod download
ls -la go.mod go.sum
echo "使用Docker容器管理Go依赖..." echo "验证依赖..."
echo "测试Docker挂载是否正常:" go mod verify
docker run --rm -v "${WORKSPACE}":/workspace -w /workspace golang:1.21-alpine sh -c "
echo '容器内工作目录:'
pwd
echo '容器内文件列表:'
ls -la
echo '检查go.mod文件:'
ls -la go.mod go.sum || echo 'go.mod文件未找到'
"
echo "开始Go依赖管理..." echo "整理依赖..."
go mod tidy
# 如果直接挂载有问题,使用复制文件的方式
if docker run --rm -v "${WORKSPACE}":/workspace -w /workspace golang:1.21-alpine test -f go.mod; then
echo "✅ 直接挂载方式可用"
docker run --rm -v "${WORKSPACE}":/workspace -w /workspace golang:1.21-alpine sh -c "
echo '下载依赖...'
go mod download
echo '验证依赖...'
go mod verify
echo '整理依赖...'
go mod tidy
"
else
echo "⚠️ 直接挂载失败,使用容器复制方式"
# 创建临时容器并复制文件(设置正确的工作目录)
CONTAINER_ID=$(docker create -w /app golang:1.21-alpine sh -c "
echo '下载依赖...'
go mod download
echo '验证依赖...'
go mod verify
echo '整理依赖...'
go mod tidy
")
# 复制所有文件到容器的/app目录
docker cp . $CONTAINER_ID:/app
# 启动容器执行Go命令
docker start -a $CONTAINER_ID
# 复制结果文件回来
docker cp $CONTAINER_ID:/app/go.mod . || true
docker cp $CONTAINER_ID:/app/go.sum . || true
# 清理容器
docker rm $CONTAINER_ID
fi
echo "✅ 依赖管理完成" echo "✅ 依赖管理完成"
''' '''
@ -136,30 +91,15 @@ pipeline {
steps { steps {
echo '🔍 运行Go代码检查...' echo '🔍 运行Go代码检查...'
sh ''' sh '''
echo "使用Docker容器进行代码检查..." echo "运行go vet..."
go vet ./...
# 创建容器并设置工作目录 echo "运行go fmt检查..."
CONTAINER_ID=$(docker create -w /app golang:1.21-alpine sh -c " if [ "$(gofmt -l . | wc -l)" -gt 0 ]; then
echo '运行go vet...' echo "❌ 代码格式不正确,需要运行 go fmt"
go vet ./... gofmt -l .
exit 1
echo '运行go fmt检查...' fi
UNFORMATTED=\$(gofmt -l . 2>/dev/null || true)
if [ -n \"\$UNFORMATTED\" ]; then
echo '❌ 代码格式不正确,需要运行 go fmt'
echo \$UNFORMATTED
exit 1
fi
")
# 复制文件到容器
docker cp . $CONTAINER_ID:/app
# 执行代码检查
docker start -a $CONTAINER_ID
# 清理容器
docker rm $CONTAINER_ID
echo "✅ 代码检查通过" echo "✅ 代码检查通过"
''' '''
@ -170,35 +110,14 @@ pipeline {
steps { steps {
echo '🧪 运行单元测试...' echo '🧪 运行单元测试...'
sh ''' sh '''
echo "使用Docker容器运行测试..." echo "运行测试并生成覆盖率报告..."
go test -v -race -coverprofile=coverage.out -covermode=atomic ./...
# 创建容器并设置工作目录 echo "生成HTML覆盖率报告..."
CONTAINER_ID=$(docker create -w /app golang:1.21-alpine sh -c " go tool cover -html=coverage.out -o coverage.html
echo '运行测试并生成覆盖率报告...'
go test -v -race -coverprofile=coverage.out -covermode=atomic ./... || echo '测试执行完成(可能有测试失败)'
echo '生成HTML覆盖率报告...'
if [ -f coverage.out ]; then
go tool cover -html=coverage.out -o coverage.html
echo '显示覆盖率统计...'
go tool cover -func=coverage.out
else
echo '⚠️ coverage.out文件不存在跳过覆盖率报告生成'
fi
")
# 复制文件到容器 echo "显示覆盖率统计..."
docker cp . $CONTAINER_ID:/app go tool cover -func=coverage.out
# 执行测试
docker start -a $CONTAINER_ID
# 复制测试结果文件回来
docker cp $CONTAINER_ID:/app/coverage.out . || true
docker cp $CONTAINER_ID:/app/coverage.html . || true
# 清理容器
docker rm $CONTAINER_ID
''' '''
} }
post { post {
@ -262,30 +181,10 @@ EOF
steps { steps {
echo '🔨 编译Go应用程序...' echo '🔨 编译Go应用程序...'
sh ''' sh '''
echo "使用Docker容器编译Go应用..." echo "开始编译..."
CGO_ENABLED=0 GOOS=linux go build \\
# 创建容器并设置工作目录 -ldflags="-w -s -X main.gitCommit=${GIT_COMMIT_SHORT}" \\
CONTAINER_ID=$(docker create -w /app golang:1.21-alpine sh -c " -o golang-demo .
echo '开始编译...'
CGO_ENABLED=0 GOOS=linux go build \\
-ldflags='-w -s -X main.gitCommit=${GIT_COMMIT_SHORT}' \\
-o golang-demo .
echo '设置二进制文件权限...'
chmod +x golang-demo
")
# 复制文件到容器
docker cp . $CONTAINER_ID:/app
# 执行编译
docker start -a $CONTAINER_ID
# 复制编译结果回来
docker cp $CONTAINER_ID:/app/golang-demo .
# 清理容器
docker rm $CONTAINER_ID
echo "验证二进制文件..." echo "验证二进制文件..."
ls -lh golang-demo ls -lh golang-demo