From 4d8a0c7f39e1893a042f9e3bc5fec7d632d20612 Mon Sep 17 00:00:00 2001 From: aiyueqi Date: Tue, 21 Apr 2026 19:01:28 +0800 Subject: [PATCH] add README --- .gitea/workflows/docker-build-push.yml | 91 ++++++++++++++++++++++++++ .gitea/workflows/task_info.env | 3 + README.md | 17 +++++ 3 files changed, 111 insertions(+) create mode 100644 .gitea/workflows/docker-build-push.yml create mode 100644 .gitea/workflows/task_info.env create mode 100644 README.md diff --git a/.gitea/workflows/docker-build-push.yml b/.gitea/workflows/docker-build-push.yml new file mode 100644 index 0000000..8322794 --- /dev/null +++ b/.gitea/workflows/docker-build-push.yml @@ -0,0 +1,91 @@ +name: Docker Build and Push + +on: + push: + tags: + - "v*" + +jobs: + docker: + runs-on: amd64-ubuntu-24.04 + + steps: + - name: Clone repository + run: | + git clone "${{ gitea.server_url }}/${{ gitea.repository }}.git" . + git checkout "${{ gitea.ref_name }}" + + - name: Set image metadata + run: | + IMAGE_NAME="$(echo "${{ gitea.repository }}" | tr '[:upper:]' '[:lower:]' | tr '_' '-')" + IMAGE="${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${{ gitea.ref_name }}" + + echo "IMAGE_NAME=${IMAGE_NAME}" >> "$GITEA_ENV" + echo "IMAGE=${IMAGE}" >> "$GITEA_ENV" + + - name: Load and Validate Task Info + run: | + set -a + . ./task_info.env + set +a + + for name in FRAMEWORK GPU_TYPE TASK_TYPE; do + eval "value=\${${name}:-}" + if [ -z "$value" ]; then + echo "${name} is empty in task_info.env" + exit 1 + fi + + echo "${name}=${value}" >> "$GITEA_ENV" + done + + - name: Login to Docker Registry + run: | + echo "$DOCKER_PASSWORD" | docker login "$DOCKER_REGISTRY" \ + -u "$DOCKER_USERNAME" \ + --password-stdin + + - name: Build Docker Image + run: | + docker build -t "$IMAGE" . + + - name: Push Docker Image + run: | + for attempt in 1 2 3; do + echo "Starting docker push attempt ${attempt}/3 for ${IMAGE}" + docker push "$IMAGE" & + PUSH_PID=$! + + while kill -0 "$PUSH_PID" 2>/dev/null; do + echo "docker push is still running at $(date -u '+%Y-%m-%dT%H:%M:%SZ')" + sleep 60 + done + + if wait "$PUSH_PID"; then + echo "docker push completed successfully" + exit 0 + fi + + echo "docker push failed on attempt ${attempt}/3" + sleep 30 + done + + echo "docker push failed after 3 attempts" + exit 1 + + - name: Notify Image Verify + run: | + if [ -z "${FIXED_TOKEN:-}" ]; then + echo "FIXED_TOKEN is not configured on runner" + exit 1 + fi + + curl --silent --show-error --fail-with-body --location --request POST 'https://modelhub.org.cn//adminApi/image-verify' \ + --header "Xc-Token: ${FIXED_TOKEN}" \ + --header 'Content-Type: application/json' \ + --data-raw "{ + \"framework\": \"${FRAMEWORK}\", + \"gpuType\": \"${GPU_TYPE}\", + \"imageUrl\": \"${IMAGE}\", + \"taskType\": \"${TASK_TYPE}\" + }" diff --git a/.gitea/workflows/task_info.env b/.gitea/workflows/task_info.env new file mode 100644 index 0000000..0c0bfe5 --- /dev/null +++ b/.gitea/workflows/task_info.env @@ -0,0 +1,3 @@ +FRAMEWORK= +GPU_TYPE= +TASK_TYPE= diff --git a/README.md b/README.md new file mode 100644 index 0000000..a4efa17 --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +# ModelHub CICD 使用文档 +## 主要功能 +通过CICD流程实现docker镜像打包、上传镜像仓库的功能 + +## 操作流程 +1. 新增 CI/CD 配置文件:将本仓库的 .gitea/workflows/docker-build-push.yml 复制到你的代码仓库,并保持相同的目录路径,即放置到: .gitea/workflows/docker-build-push.yml +2. tag正则表达式配置:在docker-build-push.yml中,找到tags字段,其值是一个正则表达式,表示打tag时要匹配这个表达式才会触发CICD流程,默认匹配以v开头,也可以自行修改 +3. 如果使用昇腾加速卡:要将docker-build-push.yml中runs-on的值,修改成arm64-ubuntu-24.04, 其他加速卡runs-on的值与样例中保持一致,即: amd64-ubuntu-24.04 +4. 新增env配置文件:将本仓库的.gitea/workflows/task_info.env 复制到你的代码仓库,并给FRAMEWORK, GPU_TYPE, TASK_TYPE填入实际的值,用于在modelhub平台对镜像进行框架、GPU类型、任务类型的归类,如: +``` +FRAMEWORK=transformers +GPU_TYPE=Iluvatar_bi-150 +TASK_TYPE=text-generation +``` +5. 打tag触发CICD:上述文件都配置好后,执行打tag的操作,即可触发CICD流程。可以在页面的Actions中,看到CICD的执行情况 +6. CICD会依次执行docker build, docker push,以及对镜像发起审核,审核通过后,才可以在modelhub平台上选取对应的镜像进行评测流程 +