添加实用的构建和 Docker 工作流
Some checks failed
Build and Docker Pipeline / build-docker (push) Blocked by required conditions
Build and Docker Pipeline / cleanup-and-report (push) Blocked by required conditions
Build and Docker Pipeline / build-info (push) Successful in 37s
Build and Docker Pipeline / build-go-app (push) Has been cancelled
Some checks failed
Build and Docker Pipeline / build-docker (push) Blocked by required conditions
Build and Docker Pipeline / cleanup-and-report (push) Blocked by required conditions
Build and Docker Pipeline / build-info (push) Successful in 37s
Build and Docker Pipeline / build-go-app (push) Has been cancelled
This commit is contained in:
228
.gitea/workflows/build-and-docker.yml
Normal file
228
.gitea/workflows/build-and-docker.yml
Normal file
@@ -0,0 +1,228 @@
|
|||||||
|
name: Build and Docker Pipeline
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 2 * * *' # 每天凌晨2点运行
|
||||||
|
|
||||||
|
env:
|
||||||
|
REGISTRY: gitea.tailnet-68f9.ts.net
|
||||||
|
IMAGE_NAME: ben/modelscope-builder
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
# 任务1: 环境检查和基础构建
|
||||||
|
build-info:
|
||||||
|
runs-on: ubuntu
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Runner Environment Info
|
||||||
|
run: |
|
||||||
|
echo "=== DSW Runner 环境信息 ==="
|
||||||
|
echo "主机名: $(hostname)"
|
||||||
|
echo "操作系统: $(uname -a)"
|
||||||
|
echo "CPU 信息:"
|
||||||
|
nproc
|
||||||
|
cat /proc/cpuinfo | grep "model name" | head -1
|
||||||
|
echo "内存信息:"
|
||||||
|
free -h
|
||||||
|
echo "磁盘空间:"
|
||||||
|
df -h
|
||||||
|
echo "当前时间: $(date)"
|
||||||
|
echo "运行用户: $(whoami)"
|
||||||
|
echo "工作目录: $(pwd)"
|
||||||
|
|
||||||
|
- name: Check Tools Availability
|
||||||
|
run: |
|
||||||
|
echo "=== 检查可用工具 ==="
|
||||||
|
echo "Git 版本:"
|
||||||
|
git --version
|
||||||
|
echo "Docker 版本:"
|
||||||
|
docker --version || echo "Docker 未安装"
|
||||||
|
echo "Go 版本:"
|
||||||
|
go version || echo "Go 未安装"
|
||||||
|
echo "Node.js 版本:"
|
||||||
|
node --version || echo "Node.js 未安装"
|
||||||
|
echo "Python 版本:"
|
||||||
|
python3 --version || echo "Python3 未安装"
|
||||||
|
echo "=== 网络连通性测试 ==="
|
||||||
|
ping -c 2 gitea.tailnet-68f9.ts.net || echo "无法 ping Gitea"
|
||||||
|
curl -s -o /dev/null -w "Gitea HTTP 状态: %{http_code}\n" https://gitea.tailnet-68f9.ts.net || echo "无法访问 Gitea HTTPS"
|
||||||
|
|
||||||
|
# 任务2: 构建一个示例 Go 应用
|
||||||
|
build-go-app:
|
||||||
|
runs-on: ubuntu
|
||||||
|
needs: build-info
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Go
|
||||||
|
uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: '1.21'
|
||||||
|
|
||||||
|
- name: Create Sample Go App
|
||||||
|
run: |
|
||||||
|
mkdir -p ./sample-app
|
||||||
|
cat > ./sample-app/main.go << 'EOF'
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
port := os.Getenv("PORT")
|
||||||
|
if port == "" {
|
||||||
|
port = "8080"
|
||||||
|
}
|
||||||
|
|
||||||
|
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
fmt.Fprintf(w, "Hello from DSW Runner! Time: %s\n", time.Now().Format(time.RFC3339))
|
||||||
|
})
|
||||||
|
|
||||||
|
http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
fmt.Fprintln(w, "OK")
|
||||||
|
})
|
||||||
|
|
||||||
|
fmt.Printf("Server starting on port %s...\n", port)
|
||||||
|
if err := http.ListenAndServe(":"+port, nil); err != nil {
|
||||||
|
fmt.Printf("Server error: %v\n", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > ./sample-app/go.mod << 'EOF'
|
||||||
|
module sample-app
|
||||||
|
|
||||||
|
go 1.21
|
||||||
|
EOF
|
||||||
|
|
||||||
|
- name: Build Go App
|
||||||
|
run: |
|
||||||
|
cd ./sample-app
|
||||||
|
echo "开始构建 Go 应用..."
|
||||||
|
go build -v -o app main.go
|
||||||
|
echo "构建完成!"
|
||||||
|
ls -lh app
|
||||||
|
file app
|
||||||
|
|
||||||
|
- name: Test Binary
|
||||||
|
run: |
|
||||||
|
cd ./sample-app
|
||||||
|
echo "测试二进制文件..."
|
||||||
|
./app &
|
||||||
|
APP_PID=$!
|
||||||
|
sleep 2
|
||||||
|
curl -s http://localhost:8080/ || echo "服务测试失败"
|
||||||
|
kill $APP_PID || true
|
||||||
|
echo "测试完成"
|
||||||
|
|
||||||
|
- name: Upload Build Artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: go-app-binary
|
||||||
|
path: ./sample-app/app
|
||||||
|
retention-days: 7
|
||||||
|
|
||||||
|
# 任务3: Docker 镜像构建(如果 Docker 可用)
|
||||||
|
build-docker:
|
||||||
|
runs-on: ubuntu
|
||||||
|
needs: build-go-app
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Download Build Artifact
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: go-app-binary
|
||||||
|
path: ./sample-app/
|
||||||
|
|
||||||
|
- name: Make Binary Executable
|
||||||
|
run: chmod +x ./sample-app/app
|
||||||
|
|
||||||
|
- name: Create Dockerfile
|
||||||
|
run: |
|
||||||
|
cat > ./sample-app/Dockerfile << 'EOF'
|
||||||
|
FROM alpine:latest
|
||||||
|
|
||||||
|
RUN apk add --no-cache ca-certificates
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
COPY app /app/
|
||||||
|
|
||||||
|
EXPOSE 8080
|
||||||
|
|
||||||
|
ENV PORT=8080
|
||||||
|
|
||||||
|
CMD ["./app"]
|
||||||
|
EOF
|
||||||
|
|
||||||
|
- name: Build Docker Image
|
||||||
|
run: |
|
||||||
|
if command -v docker &> /dev/null; then
|
||||||
|
echo "Docker 可用,开始构建镜像..."
|
||||||
|
cd ./sample-app
|
||||||
|
docker build -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} .
|
||||||
|
docker tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
|
||||||
|
echo "镜像构建完成!"
|
||||||
|
docker images | grep ${{ env.IMAGE_NAME }}
|
||||||
|
else
|
||||||
|
echo "Docker 不可用,跳过镜像构建"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Test Docker Container
|
||||||
|
run: |
|
||||||
|
if command -v docker &> /dev/null; then
|
||||||
|
echo "测试 Docker 容器..."
|
||||||
|
docker run -d --name test-app -p 8081:8080 ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
|
||||||
|
sleep 3
|
||||||
|
curl -s http://localhost:8081/ || echo "容器测试失败"
|
||||||
|
docker stop test-app
|
||||||
|
docker rm test-app
|
||||||
|
echo "容器测试完成"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Push Docker Image (if credentials available)
|
||||||
|
run: |
|
||||||
|
if command -v docker &> /dev/null; then
|
||||||
|
echo "尝试推送镜像到仓库..."
|
||||||
|
echo "注意: 需要配置 Docker 登录凭证"
|
||||||
|
# docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
|
||||||
|
# docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 任务4: 清理和报告
|
||||||
|
cleanup-and-report:
|
||||||
|
runs-on: ubuntu
|
||||||
|
needs: [build-info, build-go-app, build-docker]
|
||||||
|
if: always()
|
||||||
|
steps:
|
||||||
|
- name: Generate Report
|
||||||
|
run: |
|
||||||
|
echo "=== 构建报告 ==="
|
||||||
|
echo "工作流运行时间: ${{ github.run_duration }}"
|
||||||
|
echo "触发事件: ${{ github.event_name }}"
|
||||||
|
echo "提交 SHA: ${{ github.sha }}"
|
||||||
|
echo "分支: ${{ github.ref }}"
|
||||||
|
echo "=== 任务状态 ==="
|
||||||
|
echo "build-info: ${{ needs.build-info.result }}"
|
||||||
|
echo "build-go-app: ${{ needs.build-go-app.result }}"
|
||||||
|
echo "build-docker: ${{ needs.build-docker.result }}"
|
||||||
|
|
||||||
|
- name: Cleanup Docker
|
||||||
|
run: |
|
||||||
|
if command -v docker &> /dev/null; then
|
||||||
|
echo "清理 Docker 资源..."
|
||||||
|
docker system prune -f || true
|
||||||
|
echo "清理完成"
|
||||||
|
fi
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
name: Test DSW Runner
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test-runner:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Test Runner Environment
|
|
||||||
run: |
|
|
||||||
echo "=== Runner Test Started ==="
|
|
||||||
echo "Runner hostname: $(hostname)"
|
|
||||||
echo "Runner OS: $(uname -a)"
|
|
||||||
echo "Current directory: $(pwd)"
|
|
||||||
echo "User: $(whoami)"
|
|
||||||
echo "Date: $(date)"
|
|
||||||
echo "=== Environment Variables ==="
|
|
||||||
env | grep -E '^(RUNNER|GITHUB|CI)' || echo "No CI env vars found"
|
|
||||||
echo "=== Runner Test Completed ==="
|
|
||||||
|
|
||||||
- name: Check Docker availability
|
|
||||||
run: |
|
|
||||||
echo "Checking Docker..."
|
|
||||||
docker --version || echo "Docker not available"
|
|
||||||
docker ps || echo "Cannot list containers"
|
|
||||||
|
|
||||||
- name: Test network connectivity
|
|
||||||
run: |
|
|
||||||
echo "Testing network..."
|
|
||||||
ping -c 2 gitea.tailnet-68f9.ts.net || echo "Cannot ping Gitea"
|
|
||||||
curl -s -o /dev/null -w "%{http_code}" https://gitea.tailnet-68f9.ts.net || echo "Cannot reach Gitea HTTPS"
|
|
||||||
Reference in New Issue
Block a user