From 4131dca66e2c6556f8864d020582fd3faaec2c8f Mon Sep 17 00:00:00 2001 From: chenxing Date: Wed, 9 Sep 2026 18:16:35 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=85=B3=E8=81=94=E6=B3=A8=E5=85=A5?= =?UTF-8?q?=E7=9A=84=E6=A0=87=E5=87=86=20CI=EF=BC=88build.yml=EF=BC=89?= =?UTF-8?q?=E2=80=94=E2=80=94=E7=A7=BB=E9=99=A4=E9=81=97=E7=95=99=20ci.yml?= =?UTF-8?q?=EF=BC=8CDockerfile/run-app.sh=20=E4=BA=A7=E7=89=A9=E5=AF=B9?= =?UTF-8?q?=E9=BD=90=20app.jar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/ci.yml | 87 ----------------------------------------- docker/Dockerfile | 8 ++-- docker/run-app.sh | 2 +- 3 files changed, 5 insertions(+), 92 deletions(-) delete mode 100644 .gitea/workflows/ci.yml diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml deleted file mode 100644 index 01f8c5d..0000000 --- a/.gitea/workflows/ci.yml +++ /dev/null @@ -1,87 +0,0 @@ -name: ci-userbase-service - -# 后端标准化 CI(projman 发布链路版): -# maven 构建 jar -> docker build -> 推 Nexus docker-hosted -> webhook 通知 projman 建档 -# 部署由 projman 执行(app userbase id=18,目标 10001):manual 模式待手动部署 / auto 模式自动部署 -# 触发:push 到 main / 手动 Run workflow -# 依赖仓库 Actions Secrets:NEXUS_USER / NEXUS_PASSWORD(ci-docker 账号)/ DEPLOY_TOKEN(projman webhook 鉴权) -on: - push: - branches: [main] - workflow_dispatch: - -jobs: - build-and-push: - runs-on: ubuntu-latest - # docker:24 自带 docker CLI,复用宿主 docker daemon。 - # 注意:act_runner v0.6.1 默认已把宿主 docker.sock 挂入每个 job 容器, - # 切勿在此再声明 volumes: docker.sock(会与默认挂载重复,报 - # "Duplicate mount point" 导致容器创建失败、全部 step cancelled)。 - container: - image: docker:24 - steps: - # docker:24 基于 alpine,默认无 git/curl;先装再手动 clone 本仓库 - - name: Install git/curl (alpine) - run: apk add --no-cache git curl - - # 内网 Gitea 无法访问 github.com 拉取 actions/checkout,改为直接 clone 本仓库 - - name: Checkout (manual, internal Gitea) - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - git clone --depth 1 --branch main "http://x-access-token:${GITHUB_TOKEN}@gitea.yunhaixingtong.com/${GITHUB_REPOSITORY}.git" /tmp/src - cp -a /tmp/src/. . - rm -rf /tmp/src - # 取提交备注首行,脱去换行/双引号/反斜杠(避免破坏 webhook JSON),截断到 200 字符 - COMMIT_MSG=$(git log -1 --pretty=%s | tr '\n' ' ' | sed 's/["\\]/ /g' | cut -c1-200) - echo "COMMIT_MSG=${COMMIT_MSG}" >> "$GITHUB_ENV" - - - name: Compute image tag - id: meta - run: echo "tag=$(echo ${GITHUB_SHA} | cut -c1-7)" >> $GITHUB_OUTPUT - - - name: Build jar with Maven - run: | - # 注意:job 容器通过 docker.sock 调的是【宿主 docker daemon】, - # 因此 docker run -v 里的路径会被宿主按【宿主路径】解析; - # 而 act 工作区是宿主上的 docker volume,容器内 $PWD 对宿主不可见, - # 直接 -v $PWD:/build 会绑成空目录导致找不到 pom.xml。 - # 故改为:起 maven 容器 -> docker cp 源码入容器 -> exec 构建 -> cp 产物回工作区。 - # mavenbuild 加入 infra-infra-net,用容器名 nexus 直连 Nexus(8081 maven-public)。 - # settings.xml profile 把 pom 的 HTTP 仓库重定向到 http://nexus:8081/repository/maven-public/。 - docker rm -f mavenbuild 2>/dev/null || true - docker run -d --name mavenbuild \ - --network infra-infra-net \ - -v /opt/docker/ubs-m2:/root/.m2 \ - -w /build maven:3.6.3-jdk-8 sleep 3600 - docker cp "${PWD}/." mavenbuild:/build/ - docker exec mavenbuild sh -c "printf '%s' 'nexus-reponexus-internalhttp://nexus:8081/repository/maven-public/truetruealwaysnexus-repo' > /root/.m2/settings.xml" - # 仅清旧 yh-auth 缓存(缺 CasSsoAutoConfiguration 的 08-05 本地安装版),强制从 Nexus 拉 -7 - docker exec mavenbuild rm -rf /root/.m2/repository/com/yunhai/platform/yh-auth-spring-boot-starter - docker exec mavenbuild sh -c 'cd /build && mvn -U -B -DskipTests clean package' - mkdir -p "${PWD}/target" - docker cp mavenbuild:/build/target/userbase.jar "${PWD}/target/userbase.jar" - docker rm -f mavenbuild - - - name: Login to Nexus docker registry - run: echo "${{ secrets.NEXUS_PASSWORD }}" | docker login nexus:8083 -u ${{ secrets.NEXUS_USER }} --password-stdin - - - name: Build image - run: docker build -t nexus:8083/docker-hosted/userbase-service:${{ steps.meta.outputs.tag }} -f docker/Dockerfile . - - - name: Push image - run: docker push nexus:8083/docker-hosted/userbase-service:${{ steps.meta.outputs.tag }} - - # 通知 projman 建档(Release);部署由 projman 按 app.deploy_mode 决定(manual=待部署 / auto=自动部署 10001) - # 注意:projman 业务错误也返回 HTTP 200(体含 {"code":N}),必须检查响应体,否则失败会静默 - - name: Notify projman (webhook) - run: | - RESP=$(curl -sS -X POST "http://192.168.10.160:8090/projman/api/deploy/webhook" \ - -H "Content-Type: application/json" \ - -H "X-Deploy-Token: ${{ secrets.DEPLOY_TOKEN }}" \ - -d "{\"app\":\"userbase\",\"tag\":\"${{ steps.meta.outputs.tag }}\",\"sha\":\"${GITHUB_SHA}\",\"message\":\"${COMMIT_MSG}\"}") - echo "webhook resp: ${RESP:-}" - if echo "${RESP}" | grep -q '"code"'; then echo "!! webhook rejected by projman"; exit 8; fi - - - name: Report build - run: echo "pushed nexus:8083/docker-hosted/userbase-service:${{ steps.meta.outputs.tag }}" diff --git a/docker/Dockerfile b/docker/Dockerfile index 19225e5..7757a48 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,4 @@ -# UserBase 后端镜像(基于已构建好的 target/userbase.jar) +# UserBase 后端镜像(基于已构建好的 target/app.jar,CI 已把 maven 产物 cp 成固定名) # 构建上下文 = service 目录: docker build -f docker/Dockerfile -t . FROM eclipse-temurin:8-jre @@ -9,9 +9,9 @@ RUN apt-get update \ && rm -rf /var/lib/apt/lists/* WORKDIR /app -COPY target/userbase.jar /app/userbase.jar -# 镜像内 application-prod.yml 仅作「nacos 不可达时的兜底默认」; -# 正常启动由 run-app.sh 从 nacos 拉取线上配置(dataId=userbase-prod.yml)后覆盖。 +COPY target/app.jar /app/app.jar +# 镜像内 application-prod.yml 即生产配置基准(nacos 已停用), +# 启动由 run-app.sh 以 application-prod.yml + 环境变量注入完成。 COPY docker/application-prod.yml /app/config/application-prod.yml COPY docker/run-app.sh /app/run-app.sh RUN chmod +x /app/run-app.sh && mkdir -p /data/upload diff --git a/docker/run-app.sh b/docker/run-app.sh index 15bcb21..8104dfa 100644 --- a/docker/run-app.sh +++ b/docker/run-app.sh @@ -5,5 +5,5 @@ set -e echo "[run-app] starting UserBase (profile=prod) ..." -exec java ${JAVA_OPTS:--Xms512m -Xmx1024m} -Dfile.encoding=UTF-8 -jar /app/userbase.jar \ +exec java ${JAVA_OPTS:--Xms512m -Xmx1024m} -Dfile.encoding=UTF-8 -jar /app/app.jar \ --spring.profiles.active=prod