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

如何在无K8s的Jenkins容器中运行Kaniko构建镜像?

问题分析

kaniko-executor: not found错误的核心原因是当前Jenkins代理节点的环境中没有Kaniko可执行文件。Kaniko并非传统的主机安装工具,它以容器镜像形式提供,你虽然定义了KANIKO_IMAGE环境变量,但未在流水线中正确调用该容器执行构建命令。

解决方法

方法1:使用Jenkins Kaniko插件(推荐)

  1. 先在Jenkins插件市场安装Kaniko Plugin
  2. 修改流水线的Build Image/Push阶段,使用插件提供的kaniko步骤:
stage('Build Image/Push') {
    steps {
        withCredentials([
            string(credentialsId: 'AZURE_TENANT_ID', variable: 'AZURE_TENANT_ID'),
            string(credentialsId: 'AZURE_CLIENT_ID', variable: 'AZURE_CLIENT_ID'),
            string(credentialsId: 'AZURE_CLIENT_SECRET', variable: 'AZURE_CLIENT_SECRET')
        ]) {
            sh 'az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET --tenant $AZURE_TENANT_ID'
            sh 'az acr login --name salmanprivatedockerregistery --expose-token'
            
            // 使用Kaniko插件执行镜像构建推送
            kaniko(
                dockerfile: DOCKERFILE,
                context: BUILD_CONTEXT,
                destination: "${IMAGE}:latest",
                kanikoImage: KANIKO_IMAGE,
                registryCredentials: [
                    azureContainerRegistry: [
                        registryUrl: 'salmanprivatedockerregistery.azurecr.io',
                        credentialsId: '你的ACR凭证ID' // 需提前在Jenkins配置ACR的用户名密码凭证
                    ]
                ]
            )
        }
    }
}

方法2:直接通过Docker运行Kaniko容器

若不想使用插件,可直接用docker run命令调用Kaniko镜像,将工作目录挂载到容器内:

stage('Build Image/Push') {
    steps {
        withCredentials([
            string(credentialsId: 'AZURE_TENANT_ID', variable: 'AZURE_TENANT_ID'),
            string(credentialsId: 'AZURE_CLIENT_ID', variable: 'AZURE_CLIENT_ID'),
            string(credentialsId: 'AZURE_CLIENT_SECRET', variable: 'AZURE_CLIENT_SECRET')
        ]) {
            sh 'az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET --tenant $AZURE_TENANT_ID'
            // 将ACR登录凭证写入指定目录,确保Kaniko能读取
            sh """
            az acr login --name salmanprivatedockerregistery --expose-token --output json | \
            jq -r '.accessToken' | docker login salmanprivatedockerregistery.azurecr.io \
            --username 00000000-0000-0000-0000-000000000000 --password-stdin --config ${DOCKER_CONFIG}/config.json
            """
            
            // 用Docker运行Kaniko容器执行构建
            sh """
            docker run --rm -v ${BUILD_CONTEXT}:/workspace \
                       -v ${DOCKER_CONFIG}:/kaniko/.docker \
                       ${KANIKO_IMAGE} \
                       --context /workspace \
                       --dockerfile /workspace/Dockerfile \
                       --destination ${IMAGE}:latest
            """
        }
    }
}
额外注意事项
  • 若使用方法2,需确保Jenkins代理节点已安装并启动Docker服务;若Jenkins本身是容器运行,需将主机Docker socket挂载到Jenkins容器,或配置Docker-in-Docker环境
  • 确保az acr login生成的凭证文件路径与Kaniko读取的路径一致,避免权限或路径找不到问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 09:27:04