From db30232834b974a33df2586ab664b2e17f61bc85 Mon Sep 17 00:00:00 2001 From: mocheng <3057647414@qq.com> Date: Thu, 14 Aug 2025 20:41:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=B7=A5=E4=BD=9C=E6=B5=813?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/master.yml | 69 ++++++++++++++----------------------- 1 file changed, 25 insertions(+), 44 deletions(-) diff --git a/.gitea/workflows/master.yml b/.gitea/workflows/master.yml index 51c8c1a5..116b0369 100644 --- a/.gitea/workflows/master.yml +++ b/.gitea/workflows/master.yml @@ -1,4 +1,4 @@ -name: Build and Push to SmartParks Registry +name: Build and Push to Target Registry # 监听master分支的推送事件 on: @@ -7,18 +7,15 @@ on: jobs: build-and-deploy: - name: 构建并推送镜像到仓库注册表 + name: 构建并推送镜像到目标仓库 runs-on: ubuntu - timeout-minutes: 30 # 设置超时时间,防止无限等待 - permissions: - packages: write # 明确请求包管理权限 - contents: read # 读取代码权限 + timeout-minutes: 30 steps: - name: 拉取代码 uses: http://git.missmoc.top/mocheng/checkout@v4 with: - fetch-depth: 0 # 拉取完整历史,确保版本信息正确 + fetch-depth: 0 - name: 使用Maven构建项目 run: | @@ -29,30 +26,24 @@ jobs: - name: 构建并推送Docker镜像 env: - # Gitea容器注册表地址 - GITEA_REGISTRY: 172.100.10.45:3000 - # 仓库路径(严格区分大小写) - REPO_PATH: by2025/dockerimage - # 使用手动创建的专用推送令牌(推荐) - GITEA_TOKEN: ${{ secrets.DOCKER_PUSH_TOKEN }} - # 当前仓库信息(用于调试) - CURRENT_REPO: ${{ github.repository }} + # 目标仓库的容器注册表地址 + TARGET_REGISTRY: 172.100.10.45:3000 + # 目标代码仓库路径(组织/仓库名,严格区分大小写) + TARGET_REPO: by2025/dockerimage # 替换为目标仓库路径 + # 登录目标仓库的账户密码(在Gitea secrets中配置) + REGISTRY_USERNAME: ${{ secrets.TARGET_REGISTRY_USERNAME }} + REGISTRY_PASSWORD: ${{ secrets.TARGET_REGISTRY_PASSWORD }} run: | - echo "===== 环境信息验证 =====" - echo "当前仓库: $CURRENT_REPO" - echo "目标仓库路径: $REPO_PATH" - echo "镜像仓库地址: $GITEA_REGISTRY" + echo "===== 环境信息 =====" + echo "目标仓库: $TARGET_REGISTRY/$TARGET_REPO" - echo "===== 登录到Gitea容器注册表 =====" - # 登录并检查结果 - if ! echo "$GITEA_TOKEN" | docker login $GITEA_REGISTRY -u ${{ github.actor }} --password-stdin; then - echo "错误:登录到容器注册表失败" - echo "请检查令牌权限和仓库地址是否正确" + echo "===== 使用账户密码登录目标仓库 =====" + if ! echo "$REGISTRY_PASSWORD" | docker login $TARGET_REGISTRY -u $REGISTRY_USERNAME --password-stdin; then + echo "错误:登录目标仓库失败,请检查账户密码" exit 1 fi echo "===== 查找项目中的Dockerfile =====" - # 查找所有Dockerfile并检查是否存在 dockerfiles=$(find . -type f -name "Dockerfile" ! -path "./.git/*") if [ -z "$dockerfiles" ]; then echo "警告:未找到任何Dockerfile" @@ -64,45 +55,35 @@ jobs: echo "===== 处理Dockerfile: $dockerfile =====" docker_context=$(dirname "$dockerfile") - # 生成镜像标签(基于目录名,转换为小写并替换斜杠) + # 生成镜像标签(转换为小写,符合Docker规范) image_tag=$(echo "$docker_context" | sed 's|./||g' | tr '/' '-' | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9_-]//g') - # 完整镜像名称(确保符合Docker规范) - full_image_name="$GITEA_REGISTRY/$REPO_PATH:$image_tag-${{ github.sha }}" + # 完整镜像名称(目标仓库路径) + full_image_name="$TARGET_REGISTRY/$TARGET_REPO:$image_tag-${{ github.sha }}" echo "镜像名称: $full_image_name" echo "===== 构建镜像 =====" if ! docker build -t "$full_image_name" -f "$dockerfile" "$docker_context"; then - echo "错误:构建镜像 $full_image_name 失败" + echo "错误:构建镜像失败" exit 1 fi - echo "===== 测试镜像 =====" - if ! docker images "$full_image_name" | grep -q "$full_image_name"; then - echo "错误:镜像构建后未找到 $full_image_name" - exit 1 - fi - - echo "===== 推送镜像 =====" + echo "===== 推送镜像到目标仓库 =====" if ! docker push "$full_image_name"; then - echo "错误:推送镜像 $full_image_name 失败" - echo "可能原因:令牌无write:packages权限、仓库不存在或网络问题" - # 尝试获取详细错误信息 - curl -u ${{ github.actor }}:$GITEA_TOKEN $GITEA_REGISTRY/v2/_catalog + echo "错误:推送镜像失败,请检查账户是否有目标仓库的推送权限" exit 1 fi # 推送latest标签 - latest_image="$GITEA_REGISTRY/$REPO_PATH:$image_tag-latest" + latest_image="$TARGET_REGISTRY/$TARGET_REPO:$image_tag-latest" echo "===== 推送最新标签: $latest_image =====" docker tag "$full_image_name" "$latest_image" if ! docker push "$latest_image"; then - echo "错误:推送最新标签 $latest_image 失败" + echo "错误:推送latest标签失败" exit 1 fi done echo "===== 清理操作 =====" - docker logout $GITEA_REGISTRY - # 可选:清理构建的镜像释放空间 + docker logout $TARGET_REGISTRY docker system prune -f echo "===== 所有操作完成 ====="