diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index cda3ae62..fb2baac7 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -67,17 +67,21 @@ jobs: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Build and push image + - name: Login to Aliyun ACR + uses: docker/login-action@v3 + with: + registry: ${{ secrets.ALIYUN_REGISTRY }} + username: ${{ secrets.ALIYUN_USERNAME }} + password: ${{ secrets.ALIYUN_PASSWORD }} + - name: Build and push images run: | echo "build_target=${{ matrix.build_target }}" echo "tag=${{ needs.define-matrix.outputs.tag }}" echo "tag_cn=${{ needs.define-matrix.outputs.tag_cn }}" - image_name=$(bash script/get_image_name.sh ${{ github.repository_owner }} "${{ matrix.build_target }}" "${{ needs.define-matrix.outputs.tag }}") - image_name_cn=$(bash script/get_image_name.sh ${{ github.repository_owner }} "${{ matrix.build_target }}" "${{ needs.define-matrix.outputs.tag_cn }}") - echo "image_name=$image_name" >> $GITHUB_OUTPUT - echo "image_name_cn=$image_name_cn" >> $GITHUB_OUTPUT - echo "building image $image_name" - is_cn="0" bash script/build_and_push_images.sh "${{ matrix.build_target }}" "$image_name" $is_cn - echo "building image $image_name_cn" - is_cn="1" bash script/build_and_push_images.sh "${{ matrix.build_target }}" "$image_name_cn" $is_cn + ghcr_image_name=$(bash script/get_image_name.sh "ghcr.io" "${{ github.repository_owner }}" "${{ matrix.build_target }}" "${{ needs.define-matrix.outputs.tag }}") + acr_image_name=$(bash script/get_image_name.sh "${{ secrets.ALIYUN_REGISTRY }}" "${{ github.repository_owner }}" "${{ matrix.build_target }}" "${{ needs.define-matrix.outputs.tag_cn }}") + echo "ghcr_image_name=$ghcr_image_name" >> $GITHUB_OUTPUT + echo "acr_image_name=$acr_image_name" >> $GITHUB_OUTPUT + echo "Building and pushing both images..." + bash script/build_and_push_images.sh "${{ matrix.build_target }}" "$ghcr_image_name" "$acr_image_name" # TODO: generate runtime yaml and json diff --git a/script/build_and_push_images.sh b/script/build_and_push_images.sh index 58db2108..c0451f7d 100644 --- a/script/build_and_push_images.sh +++ b/script/build_and_push_images.sh @@ -1,24 +1,42 @@ #!/bin/bash build_target=$1 -image_name=$2 -is_cn=$3 +ghcr_image_name=$2 +acr_image_name=$3 -function build_and_push_image() { +function build_and_push_images() { + # 构建并推送ghcr镜像 + echo "Building and pushing ghcr image: $ghcr_image_name" docker buildx build --push \ --file "$build_target" \ --platform linux/amd64 \ - --tag "$image_name" \ + --tag "$ghcr_image_name" \ + . + + # 执行CN补丁 + execute_cn_patch + + # 构建并推送阿里云ACR镜像 + echo "Building and pushing ACR image: $acr_image_name" + docker buildx build --push \ + --file "$build_target" \ + --platform linux/amd64 \ + --tag "$acr_image_name" \ . } function execute_cn_patch() { script_dir=$(dirname "$(dirname "$build_target")") - bash "$script_dir/update_cn_dockerfile.sh" "$build_target" + if [ -f "$script_dir/update_cn_dockerfile.sh" ]; then + echo "Applying CN patch..." + bash "$script_dir/update_cn_dockerfile.sh" "$build_target" + fi } -if [ "$is_cn" == "1" ]; then - execute_cn_patch +# 检查参数数量 +if [ "$#" -ne 3 ]; then + echo "Usage: $0 " + exit 1 fi -build_and_push_image +build_and_push_images diff --git a/script/get_image_name.sh b/script/get_image_name.sh index 37e82850..82f4f040 100644 --- a/script/get_image_name.sh +++ b/script/get_image_name.sh @@ -1,15 +1,16 @@ #!/bin/bash -if [ "$#" -ne 3 ]; then - echo "Usage: $0 " +if [ "$#" -ne 4 ]; then + echo "Usage: $0 " exit 1 fi -USERNAME=$1 -BUILD_TARGET=$2 -TAG=$3 +REGISTRY=$1 +USERNAME=$2 +BUILD_TARGET=$3 +TAG=$4 IFS='/' read -ra ADDR <<< "$BUILD_TARGET" IMAGE_NAME="${ADDR[1]}-${ADDR[2]}" -echo "ghcr.io/$USERNAME/devbox/$IMAGE_NAME:$TAG" +echo "$REGISTRY/$USERNAME/devbox/$IMAGE_NAME:$TAG"