Files
dify-plus/.gitlab-ci.yml
2025-04-01 11:45:00 +08:00

232 lines
6.9 KiB
YAML

# .gitlab-ci.yml
# 构建并推送API、Web、Admin-Server、Admin-Web镜像到腾讯云容器镜像服务
stages:
- build
- manifest
variables:
DOCKER_REGISTRY: ccr.ccs.tencentyun.com
DIFY_WEB_IMAGE_NAME: ${DOCKER_REGISTRY}/yfgaia/dify-plus-web
DIFY_API_IMAGE_NAME: ${DOCKER_REGISTRY}/yfgaia/dify-plus-api
ADMIN_WEB_IMAGE_NAME: ${DOCKER_REGISTRY}/yfgaia/dify-plus-admin-web
ADMIN_SERVER_IMAGE_NAME: ${DOCKER_REGISTRY}/yfgaia/dify-plus-admin-server
# 只有在打tag时触发
workflow:
rules:
- if: $CI_COMMIT_TAG
when: always
- when: never
default:
before_script:
- docker login ${DOCKER_REGISTRY} -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD}
# 构建API镜像 - AMD64
build-api-amd64:
stage: build
script:
- |
platform="linux/amd64"
image_name=$DIFY_API_IMAGE_NAME
tag=$CI_COMMIT_TAG
platform_tag="$tag-amd64"
docker build \
--platform $platform \
--build-arg COMMIT_SHA=$CI_COMMIT_SHA \
--tag $image_name:$platform_tag \
--tag $image_name:$CI_COMMIT_SHA-amd64 \
-f api/Dockerfile api
docker push $image_name:$platform_tag
docker push $image_name:$CI_COMMIT_SHA-amd64
echo $image_name:$platform_tag >> manifest_api.txt
# 构建API镜像 - ARM64
build-api-arm64:
stage: build
script:
- |
platform="linux/arm64"
image_name=$DIFY_API_IMAGE_NAME
tag=$CI_COMMIT_TAG
platform_tag="$tag-arm64"
docker build \
--platform $platform \
--build-arg COMMIT_SHA=$CI_COMMIT_SHA \
--tag $image_name:$platform_tag \
--tag $image_name:$CI_COMMIT_SHA-arm64 \
-f api/Dockerfile api
docker push $image_name:$platform_tag
docker push $image_name:$CI_COMMIT_SHA-arm64
echo $image_name:$platform_tag >> manifest_api.txt
# 构建Web镜像 - AMD64
build-web-amd64:
stage: build
script:
- |
platform="linux/amd64"
image_name=$DIFY_WEB_IMAGE_NAME
tag=$CI_COMMIT_TAG
platform_tag="$tag-amd64"
docker build \
--platform $platform \
--build-arg COMMIT_SHA=$CI_COMMIT_SHA \
--tag $image_name:$platform_tag \
--tag $image_name:$CI_COMMIT_SHA-amd64 \
-f web/Dockerfile web
docker push $image_name:$platform_tag
docker push $image_name:$CI_COMMIT_SHA-amd64
echo $image_name:$platform_tag >> manifest_web.txt
# 构建Web镜像 - ARM64
build-web-arm64:
stage: build
script:
- |
platform="linux/arm64"
image_name=$DIFY_WEB_IMAGE_NAME
tag=$CI_COMMIT_TAG
platform_tag="$tag-arm64"
docker build \
--platform $platform \
--build-arg COMMIT_SHA=$CI_COMMIT_SHA \
--tag $image_name:$platform_tag \
--tag $image_name:$CI_COMMIT_SHA-arm64 \
-f web/Dockerfile web
docker push $image_name:$platform_tag
docker push $image_name:$CI_COMMIT_SHA-arm64
echo $image_name:$platform_tag >> manifest_web.txt
# 构建Admin Server镜像 - AMD64
build-admin-server-amd64:
stage: build
script:
- |
platform="linux/amd64"
image_name=$ADMIN_SERVER_IMAGE_NAME
tag=$CI_COMMIT_TAG
platform_tag="$tag-amd64"
docker build \
--platform $platform \
--tag $image_name:$platform_tag \
--tag $image_name:$CI_COMMIT_SHA-amd64 \
-f admin/server/Dockerfile admin/server
docker push $image_name:$platform_tag
docker push $image_name:$CI_COMMIT_SHA-amd64
echo $image_name:$platform_tag >> manifest_admin_server.txt
# 构建Admin Server镜像 - ARM64
build-admin-server-arm64:
stage: build
script:
- |
platform="linux/arm64"
image_name=$ADMIN_SERVER_IMAGE_NAME
tag=$CI_COMMIT_TAG
platform_tag="$tag-arm64"
docker build \
--platform $platform \
--tag $image_name:$platform_tag \
--tag $image_name:$CI_COMMIT_SHA-arm64 \
-f admin/server/Dockerfile admin/server
docker push $image_name:$platform_tag
docker push $image_name:$CI_COMMIT_SHA-arm64
echo $image_name:$platform_tag >> manifest_admin_server.txt
# 构建Admin Web镜像 - AMD64
build-admin-web-amd64:
stage: build
script:
- |
platform="linux/amd64"
image_name=$ADMIN_WEB_IMAGE_NAME
tag=$CI_COMMIT_TAG
platform_tag="$tag-amd64"
docker build \
--platform $platform \
--tag $image_name:$platform_tag \
--tag $image_name:$CI_COMMIT_SHA-amd64 \
-f admin/web/Dockerfile admin/web
docker push $image_name:$platform_tag
docker push $image_name:$CI_COMMIT_SHA-amd64
echo $image_name:$platform_tag >> manifest_admin_web.txt
# 构建Admin Web镜像 - ARM64
build-admin-web-arm64:
stage: build
script:
- |
platform="linux/arm64"
image_name=$ADMIN_WEB_IMAGE_NAME
tag=$CI_COMMIT_TAG
platform_tag="$tag-arm64"
docker build \
--platform $platform \
--tag $image_name:$platform_tag \
--tag $image_name:$CI_COMMIT_SHA-arm64 \
-f admin/web/Dockerfile admin/web
docker push $image_name:$platform_tag
docker push $image_name:$CI_COMMIT_SHA-arm64
echo $image_name:$platform_tag >> manifest_admin_web.txt
# 创建API多架构清单
create-manifest-api:
stage: manifest
needs:
- build-api-amd64
- build-api-arm64
script:
- |
image_name=$DIFY_API_IMAGE_NAME
tag=$CI_COMMIT_TAG
docker manifest create $image_name:$tag $(cat manifest_api.txt)
docker manifest create $image_name:latest $(cat manifest_api.txt)
docker manifest push $image_name:$tag
docker manifest push $image_name:latest
# 创建Web多架构清单
create-manifest-web:
stage: manifest
needs:
- build-web-amd64
- build-web-arm64
script:
- |
image_name=$DIFY_WEB_IMAGE_NAME
tag=$CI_COMMIT_TAG
docker manifest create $image_name:$tag $(cat manifest_web.txt)
docker manifest create $image_name:latest $(cat manifest_web.txt)
docker manifest push $image_name:$tag
docker manifest push $image_name:latest
# 创建Admin Server多架构清单
create-manifest-admin-server:
stage: manifest
needs:
- build-admin-server-amd64
- build-admin-server-arm64
script:
- |
image_name=$ADMIN_SERVER_IMAGE_NAME
tag=$CI_COMMIT_TAG
docker manifest create $image_name:$tag $(cat manifest_admin_server.txt)
docker manifest create $image_name:latest $(cat manifest_admin_server.txt)
docker manifest push $image_name:$tag
docker manifest push $image_name:latest
# 创建Admin Web多架构清单
create-manifest-admin-web:
stage: manifest
needs:
- build-admin-web-amd64
- build-admin-web-arm64
script:
- |
image_name=$ADMIN_WEB_IMAGE_NAME
tag=$CI_COMMIT_TAG
docker manifest create $image_name:$tag $(cat manifest_admin_web.txt)
docker manifest create $image_name:latest $(cat manifest_admin_web.txt)
docker manifest push $image_name:$tag
docker manifest push $image_name:latest