mirror of
https://github.com/open-webui/open-webui.git
synced 2025-12-13 21:05:19 +00:00
Create docker-image.yml
Updated Docker CI workflow to improve readability and maintainability. Added environment variables and enhanced steps for building and exporting Docker images.
This commit is contained in:
parent
ebdc4a8620
commit
73af7a4a4f
1 changed files with 137 additions and 0 deletions
137
.github/workflows/docker-image.yml
vendored
Normal file
137
.github/workflows/docker-image.yml
vendored
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
name: Docker Image CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
workflow_dispatch: # 允许手动触发
|
||||
|
||||
env:
|
||||
IMAGE_NAME: open-webui-next
|
||||
OUTPUT_DIR: /tmp/docker-images
|
||||
KEEP_VERSIONS: 2
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
steps:
|
||||
- name: 检出代码
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: 设置环境变量
|
||||
run: |
|
||||
echo "IMAGE_TAG=${{ github.run_number }}" >> $GITHUB_ENV
|
||||
echo "BUILD_NUMBER=${{ github.run_number }}" >> $GITHUB_ENV
|
||||
echo "✓ 代码检出完成"
|
||||
ls -la
|
||||
|
||||
- name: 验证 Dockerfile
|
||||
run: |
|
||||
if [ ! -f "Dockerfile" ]; then
|
||||
echo "❌ 找不到 Dockerfile"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ Dockerfile 存在"
|
||||
head -10 Dockerfile
|
||||
|
||||
- name: 设置 Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: 构建 Docker 镜像
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
load: true
|
||||
tags: |
|
||||
${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}
|
||||
${{ env.IMAGE_NAME }}:latest
|
||||
build-args: |
|
||||
USE_SLIM=true
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
- name: 验证镜像构建
|
||||
run: |
|
||||
echo "✓ 镜像构建完成"
|
||||
docker images | grep ${{ env.IMAGE_NAME }}
|
||||
|
||||
- name: 创建输出目录
|
||||
run: |
|
||||
mkdir -p ${{ env.OUTPUT_DIR }}
|
||||
echo "输出目录: ${{ env.OUTPUT_DIR }}"
|
||||
|
||||
- name: 导出镜像
|
||||
run: |
|
||||
echo "导出镜像..."
|
||||
docker save ${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} | gzip > ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}-${{ env.IMAGE_TAG }}.tar.gz
|
||||
docker save ${{ env.IMAGE_NAME }}:latest | gzip > ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}-latest.tar.gz
|
||||
echo "✓ 镜像导出完成"
|
||||
ls -lh ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}*.tar.gz
|
||||
|
||||
- name: 上传镜像制品
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: docker-images-${{ env.IMAGE_TAG }}
|
||||
path: |
|
||||
${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}-${{ env.IMAGE_TAG }}.tar.gz
|
||||
${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}-latest.tar.gz
|
||||
retention-days: 30
|
||||
|
||||
- name: 清理本地资源
|
||||
if: always()
|
||||
run: |
|
||||
echo "========================================="
|
||||
echo "当前构建: ${{ env.BUILD_NUMBER }}"
|
||||
VERSION_TO_DELETE=$((BUILD_NUMBER - 2))
|
||||
echo "准备清理版本: ${VERSION_TO_DELETE}"
|
||||
echo "========================================="
|
||||
|
||||
# 清理旧版本的 Docker 镜像
|
||||
echo "清理 Docker 镜像..."
|
||||
docker rmi ${{ env.IMAGE_NAME }}:${VERSION_TO_DELETE} 2>/dev/null || echo "镜像 ${VERSION_TO_DELETE} 不存在或已清理"
|
||||
|
||||
# 清理旧版本的 tar.gz 文件
|
||||
echo "清理导出文件..."
|
||||
rm -f ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}-${VERSION_TO_DELETE}.tar.gz
|
||||
|
||||
# 清理未使用的 Docker 资源
|
||||
echo "清理未使用的 Docker 资源..."
|
||||
docker image prune -f
|
||||
|
||||
echo "✓ 清理完成"
|
||||
echo ""
|
||||
echo "剩余镜像:"
|
||||
docker images | grep ${{ env.IMAGE_NAME }} || echo "无相关镜像"
|
||||
echo ""
|
||||
echo "剩余文件:"
|
||||
ls -lh ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}*.tar.gz 2>/dev/null || echo "无相关文件"
|
||||
|
||||
- name: 显示磁盘使用情况
|
||||
if: always()
|
||||
run: |
|
||||
echo "最终磁盘使用情况:"
|
||||
df -h ${{ env.OUTPUT_DIR }}
|
||||
|
||||
- name: 构建摘要
|
||||
if: success()
|
||||
run: |
|
||||
echo "=========================================" >> $GITHUB_STEP_SUMMARY
|
||||
echo "✅ 构建成功!" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**镜像信息:**" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- 镜像名称: \`${{ env.IMAGE_NAME }}\`" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- 镜像标签: \`${{ env.IMAGE_TAG }}\`, \`latest\`" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- 构建编号: \`${{ github.run_number }}\`" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**导出文件:**" >> $GITHUB_STEP_SUMMARY
|
||||
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
|
||||
ls -lh ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}*.tar.gz >> $GITHUB_STEP_SUMMARY
|
||||
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
|
||||
echo "=========================================" >> $GITHUB_STEP_SUMMARY
|
||||
Loading…
Reference in a new issue