Jenkins 凭据如何工作或应用于管道中的代理

How does Jenkins credentials work or apply to agent in a pipeline

我遵循了两段代码,一段有效,另一段无效。我需要了解 agent 是否在舞台内声明,凭据被识别,如果 agent 声明在 top/global 级别,则凭据不起作用并以错误结束.谁能帮助理解为什么会这样以及如何解决这个问题?

错误:

pipeline 
{
    environment {
    DOCKER_REGISTRY='xxxxxxxxx'
    DOCKER_CREDENTIAL='dcaas-r'
  }
  agent 
  {
     docker { 
     image "xxxxxxxxx/dotnet:latest"
     registryUrl env.DOCKER_REGISTRY
     registryCredentialsId env.DOCKER_CREDENTIAL
     reuseNode true
     }
  }    
    stages 
    {
        stage('Test') 
        {
            steps 
            {
                sh 'dotnet --version' 
            }
        }
    }
}

Error response from daemon: Head "xxxxx/dotnet/manifests/latest": unknown: Authentication is required

成功:

pipeline 
    {
        agent any
        environment {
        DOCKER_REGISTRY='xxxxxxxxx'
        DOCKER_CREDENTIAL='dcaas-r'
      }
   
        stages 
        {
            stage('Test') 
            {
               agent 
               {
                  docker { 
                  image "xxxxxxxxx/dotnet:latest"
                  registryUrl env.DOCKER_REGISTRY
                  registryCredentialsId env.DOCKER_CREDENTIAL
                  reuseNode true
                  }
               } 
                steps 
                {
                    sh 'dotnet --version' 
                }
            }
        }
    }

为了不在所有 stages 中写入相同的 agent 块,可以做什么?

如果您有全局代理指令,则不需要将 docker 值指定为环境变量,因为

  • 它们不是环境变量
  • 它们只使用一次
  • 它们不是动态的

它看起来像:

agent {
  docker { 
    image                 'xxxxxxxxx/dotnet:latest'
    registryUrl           'xxxxxxxxx'
    registryCredentialsId 'dcaas-r'
    reuseNode             true
  }
}    

您只会查看阶段的日志,因此不会记录全局指令。这意味着您将无法在全局指令中看到 docker agent 的图像检索日志。