新增工作流3
Some checks failed
Build and Push to Target Registry / 构建并推送镜像到目标仓库 (push) Failing after 1m56s
Some checks failed
Build and Push to Target Registry / 构建并推送镜像到目标仓库 (push) Failing after 1m56s
This commit is contained in:
parent
515d473da0
commit
db30232834
@ -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 "===== 所有操作完成 ====="
|
||||
|
Loading…
Reference in New Issue
Block a user