diff --git a/.gitea/workflows/master.yml b/.gitea/workflows/master.yml index f3695db5..af1bb707 100644 --- a/.gitea/workflows/master.yml +++ b/.gitea/workflows/master.yml @@ -1,61 +1,90 @@ -name: Build and Push Docker Images +name: Build and Push to SmartParks Registry -# 监听master分支的push事件 +# 监听master分支的推送事件 on: push: branches: [ master ] jobs: - build-and-push: - # 使用当前运行器(已安装Java、Maven和Docker) + build-and-deploy: + name: 构建并推送镜像到仓库注册表 runs-on: ubuntu + timeout-minutes: 30 # 设置超时时间,防止无限等待 steps: - # 拉取代码 - - name: Checkout code - uses: http://git.missmoc.top/mocheng/checkout@v4 + - name: 拉取代码 + uses: actions/checkout@v4 + with: + fetch-depth: 0 # 拉取完整历史,确保版本信息正确 - # 使用服务器上的Maven构建项目 - - name: Build with Maven + - name: 使用Maven构建项目 run: | - echo "开始使用Maven构建项目..." - /maven/apache-maven-3.9.11/bin/mvn clean package -DskipTests - echo "Maven构建完成" + echo "===== 开始Maven构建 =====" + mvn clean package -DskipTests + echo "===== Maven构建完成 =====" + # 验证构建结果 + if [ ! -d "./target" ]; then + echo "错误:Maven构建未生成target目录" + exit 1 + fi - # 查找所有Dockerfile并构建推送镜像 - - name: Build and push Docker images + - name: 构建并推送Docker镜像 env: - # 私有仓库地址(请替换为实际地址) - DOCKER_REGISTRY: 172.100.10.45:3000 - # 私有仓库认证信息(在Gitea仓库设置中配置secrets) - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + # Gitea容器注册表地址(请确认是否正确) + GITEA_REGISTRY: 172.100.10.45:3000 + # 仓库路径(组织/仓库名,严格区分大小写) + REPO_PATH: by2025/SmartParks + # Gitea内置认证令牌 + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} run: | - echo "登录到私有Docker仓库..." - echo "$DOCKER_PASSWORD" | docker login $DOCKER_REGISTRY -u $DOCKER_USERNAME --password-stdin + echo "===== 登录到Gitea容器注册表 =====" + # 登录并检查结果 + if ! echo "$GITEA_TOKEN" | docker login $GITEA_REGISTRY -u ${{ github.actor }} --password-stdin; then + echo "错误:登录到容器注册表失败" + exit 1 + fi - echo "查找项目中的所有Dockerfile..." - # 查找所有Dockerfile(排除.git目录) - find . -type f -name "Dockerfile" ! -path "./.git/*" | while read -r dockerfile; do - echo "处理Dockerfile: $dockerfile" + echo "===== 查找项目中的Dockerfile =====" + # 查找所有Dockerfile并检查是否存在 + dockerfiles=$(find . -type f -name "Dockerfile" ! -path "./.git/*") + if [ -z "$dockerfiles" ]; then + echo "警告:未找到任何Dockerfile" + exit 0 + fi + + # 处理每个Dockerfile + echo "$dockerfiles" | while read -r dockerfile; do + echo "===== 处理Dockerfile: $dockerfile =====" - # 获取Dockerfile所在目录 docker_context=$(dirname "$dockerfile") - - # 生成镜像名称(基于目录结构) - image_name=$(echo "$docker_context" | sed 's|./||g' | tr '/' '-') - full_image_name="$DOCKER_REGISTRY/$image_name:${{ github.sha }}" + # 生成镜像标签(基于目录名,转换为小写并替换斜杠) + image_tag=$(echo "$docker_context" | sed 's|./||g' | tr '/' '-' | tr '[:upper:]' '[:lower:]') + # 完整镜像名称 + full_image_name="$GITEA_REGISTRY/$REPO_PATH:$image_tag-${{ github.sha }}" echo "构建镜像: $full_image_name" - docker build -t "$full_image_name" -f "$dockerfile" "$docker_context" + if ! docker build -t "$full_image_name" -f "$dockerfile" "$docker_context"; then + echo "错误:构建镜像 $full_image_name 失败" + exit 1 + fi echo "推送镜像: $full_image_name" - docker push "$full_image_name" + if ! docker push "$full_image_name"; then + echo "错误:推送镜像 $full_image_name 失败" + exit 1 + fi - # 可选:添加latest标签并推送 - docker tag "$full_image_name" "$DOCKER_REGISTRY/$image_name:latest" - docker push "$DOCKER_REGISTRY/$image_name:latest" + # 推送latest标签 + latest_image="$GITEA_REGISTRY/$REPO_PATH:$image_tag-latest" + echo "推送最新标签: $latest_image" + docker tag "$full_image_name" "$latest_image" + if ! docker push "$latest_image"; then + echo "错误:推送最新标签 $latest_image 失败" + exit 1 + fi done - echo "所有镜像构建和推送完成" - docker logout $DOCKER_REGISTRY + echo "===== 清理操作 =====" + docker logout $GITEA_REGISTRY + echo "===== 所有操作完成 =====" +