From ab99ae7641187a379428614599266c9e6e4ae97d Mon Sep 17 00:00:00 2001 From: wangtianqi <1350217033@qq.com> Date: Wed, 25 Jun 2025 14:20:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Jenkinsfile | 60 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 49 insertions(+), 11 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 4232871..13adb3a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -101,8 +101,8 @@ pipeline { else echo "⚠️ 直接挂载失败,使用容器复制方式" - # 创建临时容器并复制文件 - CONTAINER_ID=$(docker create golang:1.21-alpine sh -c " + # 创建临时容器并复制文件(设置正确的工作目录) + CONTAINER_ID=$(docker create -w /app golang:1.21-alpine sh -c " echo '下载依赖...' go mod download @@ -113,10 +113,10 @@ pipeline { go mod tidy ") - # 复制所有文件到容器 + # 复制所有文件到容器的/app目录 docker cp . $CONTAINER_ID:/app - # 设置工作目录并运行 + # 启动容器执行Go命令 docker start -a $CONTAINER_ID # 复制结果文件回来 @@ -138,8 +138,8 @@ pipeline { sh ''' echo "使用Docker容器进行代码检查..." - # 使用简化的挂载方式 - docker run --rm -v "${WORKSPACE}":/workspace -w /workspace golang:1.21-alpine sh -c " + # 创建容器并设置工作目录 + CONTAINER_ID=$(docker create -w /app golang:1.21-alpine sh -c " echo '运行go vet...' go vet ./... @@ -150,7 +150,16 @@ pipeline { echo \$UNFORMATTED exit 1 fi - " + ") + + # 复制文件到容器 + docker cp . $CONTAINER_ID:/app + + # 执行代码检查 + docker start -a $CONTAINER_ID + + # 清理容器 + docker rm $CONTAINER_ID echo "✅ 代码检查通过" ''' @@ -162,7 +171,9 @@ pipeline { echo '🧪 运行单元测试...' sh ''' echo "使用Docker容器运行测试..." - docker run --rm -v "${WORKSPACE}":/workspace -w /workspace golang:1.21-alpine sh -c " + + # 创建容器并设置工作目录 + CONTAINER_ID=$(docker create -w /app golang:1.21-alpine sh -c " echo '运行测试并生成覆盖率报告...' go test -v -race -coverprofile=coverage.out -covermode=atomic ./... || echo '测试执行完成(可能有测试失败)' @@ -174,7 +185,20 @@ pipeline { else echo '⚠️ coverage.out文件不存在,跳过覆盖率报告生成' fi - " + ") + + # 复制文件到容器 + docker cp . $CONTAINER_ID:/app + + # 执行测试 + 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 { @@ -239,7 +263,9 @@ EOF echo '🔨 编译Go应用程序...' sh ''' echo "使用Docker容器编译Go应用..." - docker run --rm -v "${WORKSPACE}":/workspace -w /workspace golang:1.21-alpine sh -c " + + # 创建容器并设置工作目录 + CONTAINER_ID=$(docker create -w /app golang:1.21-alpine sh -c " echo '开始编译...' CGO_ENABLED=0 GOOS=linux go build \\ -ldflags='-w -s -X main.gitCommit=${GIT_COMMIT_SHORT}' \\ @@ -247,7 +273,19 @@ EOF 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 "验证二进制文件..." ls -lh golang-demo