# .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