You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AKS自托管GitHub Actions中用Kaniko构建ACR镜像遇Node缺失问题

解决方案

方案1:在Kaniko Job中手动安装Node环境

Kaniko官方镜像(如gcr.io/kaniko-project/executor:latest)基于Debian,可通过apt包管理器安装Node.js,之后就能正常使用download-artifact Action:

jobs:
  pre-build:
    runs-on: self-hosted
    steps:
      - name: 检出代码
        uses: actions/checkout@v4
      # 其他前置步骤:生成配置文件、编译代码等
      - name: 上传构建上下文
        uses: actions/upload-artifact@v4
        with:
          name: build-context
          path: ./path-to-your-context

  build-with-kaniko:
    runs-on: self-hosted
    container:
      image: gcr.io/kaniko-project/executor:latest
      options: --user root # 需要root权限安装包
    steps:
      - name: 安装Node.js
        run: |
          apt-get update && apt-get install -y nodejs npm
          npm install -g npm@latest # 可选:更新npm
      - name: 下载构建上下文
        uses: actions/download-artifact@v4
        with:
          name: build-context
          path: ./build-context
      - name: 构建并推送镜像到ACR
        run: |
          echo "{\"auths\":{\"${{ secrets.ACR_REGISTRY }}\":{\"username\":\"${{ secrets.ACR_USERNAME }}\",\"password\":\"${{ secrets.ACR_PASSWORD }}\"}}}" > /kaniko/.docker/config.json
          /kaniko/executor \
            --context ./build-context \
            --dockerfile ./build-context/Dockerfile \
            --destination ${{ secrets.ACR_REGISTRY }}/your-image:${{ github.sha }}

方案2:跳过download-artifact Action,直接用curl下载工件

如果不想在Kaniko镜像中安装Node,可利用GitHub的工件API直接下载,无需依赖Node环境:

jobs:
  pre-build:
    # 同方案1的pre-build步骤

  build-with-kaniko:
    runs-on: self-hosted
    container:
      image: gcr.io/kaniko-project/executor:latest
    steps:
      - name: 下载构建上下文
        run: |
          # 获取工件下载URL
          ARTIFACT_URL=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
            "https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.run_id }}/artifacts" \
            | grep -E 'browser_download_url.*build-context' | cut -d '"' -f 4)
          # 下载并解压工件
          curl -L -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" $ARTIFACT_URL -o build-context.zip
          unzip build-context.zip -d ./build-context
      - name: 构建并推送镜像到ACR
        # 同方案1的构建步骤

方案3:自定义包含Node环境的Kaniko镜像

如果需要长期使用,可预先构建一个包含Node.js的Kaniko镜像,推送到ACR或其他镜像仓库,之后在Job中直接使用该自定义镜像:

自定义镜像Dockerfile

FROM gcr.io/kaniko-project/executor:latest
USER root
RUN apt-get update && apt-get install -y nodejs npm && npm install -g npm@latest
USER kaniko

推送自定义镜像到ACR

az acr build --registry your-acr-name --image kaniko-with-node:latest .

GitHub Actions Job中使用自定义镜像

jobs:
  build-with-kaniko:
    runs-on: self-hosted
    container:
      image: your-acr-name.azurecr.io/kaniko-with-node:latest
      options: --user root # 若需要root权限执行步骤
    steps:
      - name: 下载构建上下文
        uses: actions/download-artifact@v4
        with:
          name: build-context
          path: ./build-context
      # 后续构建推送步骤同方案1

方案4:在同一个Job中完成前置步骤与Kaniko构建

如果AKS自托管Runner的节点环境本身支持运行Kaniko二进制(无需Docker),可合并两个Job,在Runner环境中完成前置步骤后,直接调用Kaniko执行构建:

jobs:
  build-and-push:
    runs-on: self-hosted
    steps:
      - name: 检出代码
        uses: actions/checkout@v4
      # 执行所有前置步骤:生成配置、编译代码等
      - name: 下载Kaniko二进制
        run: |
          curl -L https://github.com/GoogleContainerTools/kaniko/releases/download/v1.22.0/kaniko-executor_v1.22.0_linux_amd64.tar.gz | tar xz
      - name: 构建并推送镜像到ACR
        run: |
          echo "{\"auths\":{\"${{ secrets.ACR_REGISTRY }}\":{\"username\":\"${{ secrets.ACR_USERNAME }}\",\"password\":\"${{ secrets.ACR_PASSWORD }}\"}}}" > ./config.json
          ./kaniko-executor \
            --context ./ \
            --dockerfile ./Dockerfile \
            --destination ${{ secrets.ACR_REGISTRY }}/your-image:${{ github.sha }} \
            --docker-config ./config.json

内容的提问来源于stack exchange,提问作者Felipe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 18:35:16