59 lines
1.6 KiB
YAML
59 lines
1.6 KiB
YAML
name: Docker Image CI
|
||
|
||
on:
|
||
workflow_dispatch:
|
||
push:
|
||
branches:
|
||
- main
|
||
|
||
jobs:
|
||
build:
|
||
runs-on: ubuntu-latest
|
||
|
||
# 🌟 关键点 1: 启动一个 Docker 守护进程容器 (DinD)
|
||
services:
|
||
docker:
|
||
image: docker:dind
|
||
options: --privileged
|
||
ports:
|
||
- 2376:2376
|
||
|
||
# 🌟 关键点 2: 告诉所有步骤通过 TCP 连接 Docker,而不是 Socket
|
||
env:
|
||
DOCKER_HOST: tcp://docker:2376
|
||
DOCKER_TLS_VERIFY: 1
|
||
DOCKER_CERT_PATH: /certs/client
|
||
DOCKER_TLS_CERTDIR: /certs
|
||
|
||
steps:
|
||
- name: Checkout code
|
||
uses: actions/checkout@v4
|
||
|
||
# 🌟 关键点 3: 配置 Buildx 使用上面定义的 docker 容器驱动
|
||
- name: Set up Docker Buildx
|
||
uses: docker/setup-buildx-action@v3
|
||
with:
|
||
driver: docker-container
|
||
endpoint: tcp://docker:2376
|
||
|
||
- name: Log in to Gitea Container Registry
|
||
uses: docker/login-action@v3
|
||
with:
|
||
registry: ${{ gitea.server_url }}
|
||
username: ${{ gitea.actor }}
|
||
password: ${{ secrets.GITEA_TOKEN }}
|
||
|
||
- name: Build and push Docker image
|
||
run: |
|
||
DOMAIN=$(echo "${{ gitea.server_url }}" | sed -e 's|^[^/]*//||' -e 's|/.*$||')
|
||
REPO_LOWER=$(echo "${{ gitea.repository }}" | tr '[:upper:]' '[:lower:]')
|
||
IMAGE_NAME="$DOMAIN/$REPO_LOWER"
|
||
|
||
echo "Pushing to: $IMAGE_NAME"
|
||
|
||
docker build . --file Dockerfile \
|
||
--tag "$IMAGE_NAME:latest" \
|
||
--tag "$IMAGE_NAME:${{ gitea.sha }}"
|
||
|
||
docker push "$IMAGE_NAME:latest"
|
||
docker push "$IMAGE_NAME:${{ gitea.sha }}" |