更新 .github/workflows/buidl_and_push_ghcr.yml
Some checks failed
Docker Image CI / build (push) Failing after 1m43s
Some checks failed
Docker Image CI / build (push) Failing after 1m43s
This commit is contained in:
60
.github/workflows/buidl_and_push_ghcr.yml
vendored
60
.github/workflows/buidl_and_push_ghcr.yml
vendored
@@ -8,52 +8,62 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest # 确保你的 Gitea Runner 注册了这个标签
|
||||||
|
|
||||||
# 🌟 关键点 1: 启动一个 Docker 守护进程容器 (DinD)
|
# 【关键配置】在 K8s 中使用 DinD 的标准方式
|
||||||
|
# 如果你的 runner 已经配置了挂载宿主机 docker sock,可以去掉 services 部分
|
||||||
|
# 但对于纯 DinD 模式,建议保留以下配置
|
||||||
services:
|
services:
|
||||||
docker:
|
docker:
|
||||||
image: docker:dind
|
image: docker:dind
|
||||||
options: --privileged
|
options: --privileged
|
||||||
ports:
|
ports:
|
||||||
- 2376:2376
|
- 2375:2375
|
||||||
|
|
||||||
# 🌟 关键点 2: 告诉所有步骤通过 TCP 连接 Docker,而不是 Socket
|
# Gitea Actions 默认容器可能没有 git 或 docker 客户端
|
||||||
env:
|
# 指定一个包含常用工具的容器镜像作为执行环境
|
||||||
DOCKER_HOST: tcp://docker:2376
|
container:
|
||||||
DOCKER_TLS_VERIFY: 1
|
image: catthehacker/ubuntu:act-latest
|
||||||
DOCKER_CERT_PATH: /certs/client
|
# 告诉容器 Docker 守护进程在哪里 (对应上面的 service)
|
||||||
DOCKER_TLS_CERTDIR: /certs
|
env:
|
||||||
|
DOCKER_HOST: tcp://docker:2375
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
# 🌟 关键点 3: 配置 Buildx 使用上面定义的 docker 容器驱动
|
# 设置 Docker Buildx (兼容性最好)
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
with:
|
with:
|
||||||
driver: docker-container
|
# 显式指定 endpoint,防止找不到 docker 进程
|
||||||
endpoint: tcp://docker:2376
|
driver-opts: image=moby/buildkit:master
|
||||||
|
endpoint: tcp://docker:2375
|
||||||
|
|
||||||
|
# 登录 Gitea 内置的容器镜像仓库
|
||||||
- name: Log in to Gitea Container Registry
|
- name: Log in to Gitea Container Registry
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
registry: ${{ gitea.server_url }}
|
registry: ${{ gitea.server_url }} # 自动获取你的 Gitea 地址 (带协议)
|
||||||
|
# 注意:login action通常只需要域名,如果 server_url 带 http/https 可能需要处理
|
||||||
|
# 建议直接写域名,或者使用下面的这种方式:
|
||||||
|
# registry: git.yourdomain.com
|
||||||
username: ${{ gitea.actor }}
|
username: ${{ gitea.actor }}
|
||||||
password: ${{ secrets.GITEA_TOKEN }}
|
password: ${{ secrets.GITEA_TOKEN }}
|
||||||
|
|
||||||
|
# 构建并推送
|
||||||
|
# 建议使用官方 Action 替代 shell 脚本,因为它能自动处理 Buildx 上下文
|
||||||
- name: Build and push Docker image
|
- name: Build and push Docker image
|
||||||
run: |
|
uses: docker/build-push-action@v5
|
||||||
DOMAIN=$(echo "${{ gitea.server_url }}" | sed -e 's|^[^/]*//||' -e 's|/.*$||')
|
with:
|
||||||
REPO_LOWER=$(echo "${{ gitea.repository }}" | tr '[:upper:]' '[:lower:]')
|
context: .
|
||||||
IMAGE_NAME="$DOMAIN/$REPO_LOWER"
|
file: Dockerfile
|
||||||
|
push: true
|
||||||
|
# 自动生成 tag
|
||||||
|
tags: |
|
||||||
|
${{ gitea.server_url }}/${{ gitea.actor }}/my-docs:latest
|
||||||
|
${{ gitea.server_url }}/${{ gitea.actor }}/my-docs:${{ gitea.sha }}
|
||||||
|
|
||||||
echo "Pushing to: $IMAGE_NAME"
|
# 如果上面 server_url 带了 http:// 前缀导致报错,请手动写死域名,例如:
|
||||||
|
# tags: |
|
||||||
docker build . --file Dockerfile \
|
# git.example.com/zeroornull/my-docs:latest
|
||||||
--tag "$IMAGE_NAME:latest" \
|
|
||||||
--tag "$IMAGE_NAME:${{ gitea.sha }}"
|
|
||||||
|
|
||||||
docker push "$IMAGE_NAME:latest"
|
|
||||||
docker push "$IMAGE_NAME:${{ gitea.sha }}"
|
|
||||||
Reference in New Issue
Block a user