SmartParks/.gitea/workflows/master.yml
mocheng db30232834
Some checks failed
Build and Push to Target Registry / 构建并推送镜像到目标仓库 (push) Failing after 1m56s
新增工作流3
2025-08-14 20:41:54 +08:00

90 lines
3.3 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: Build and Push to Target Registry
# 监听master分支的推送事件
on:
push:
branches: [ master ]
jobs:
build-and-deploy:
name: 构建并推送镜像到目标仓库
runs-on: ubuntu
timeout-minutes: 30
steps:
- name: 拉取代码
uses: http://git.missmoc.top/mocheng/checkout@v4
with:
fetch-depth: 0
- name: 使用Maven构建项目
run: |
echo "===== 开始Maven构建 ====="
/maven/apache-maven-3.9.11/bin/mvn clean package -DskipTests
echo "===== Maven构建完成 ====="
- name: 构建并推送Docker镜像
env:
# 目标仓库的容器注册表地址
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 "目标仓库: $TARGET_REGISTRY/$TARGET_REPO"
echo "===== 使用账户密码登录目标仓库 ====="
if ! echo "$REGISTRY_PASSWORD" | docker login $TARGET_REGISTRY -u $REGISTRY_USERNAME --password-stdin; then
echo "错误:登录目标仓库失败,请检查账户密码"
exit 1
fi
echo "===== 查找项目中的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 ====="
docker_context=$(dirname "$dockerfile")
# 生成镜像标签转换为小写符合Docker规范
image_tag=$(echo "$docker_context" | sed 's|./||g' | tr '/' '-' | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9_-]//g')
# 完整镜像名称(目标仓库路径)
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 "错误:构建镜像失败"
exit 1
fi
echo "===== 推送镜像到目标仓库 ====="
if ! docker push "$full_image_name"; then
echo "错误:推送镜像失败,请检查账户是否有目标仓库的推送权限"
exit 1
fi
# 推送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标签失败"
exit 1
fi
done
echo "===== 清理操作 ====="
docker logout $TARGET_REGISTRY
docker system prune -f
echo "===== 所有操作完成 ====="