【问题标题】:Jenkins kubernetes plugin not passing environment variables with PipelineJenkins kubernetes 插件未使用 Pipeline 传递环境变量
【发布时间】:2017-07-28 11:50:32
【问题描述】:

詹金斯版本。 2.60.1(在 Kubernetes 上的容器中运行)

Kubernetes 插件版本。 0.11 (https://github.com/jenkinsci/kubernetes-plugin)

流水线测试:

podTemplate(
  label: 'mypod',
  volumes: [
    persistentVolumeClaim(claimName: 'nfs-maven', mountPath: '/mnt/', readOnly: false)],
    envVars: [
      containerEnvVar(key: 'FOO', value: 'BAR'),
    ],
  containers: [
    containerTemplate(name: 'golang',
    image: 'golang',

    ttyEnabled: true, 
    command: 'cat',

    )]
)
{
  node('mypod') {
    stage('test env') {

        container('golang') {
            stage('build') {
                sh 'echo $FOO'
                sh 'sleep 3600'
            }
        }
    }
  }
}

变量不会传递到容器中。 回声什么也没有。回声 $FOO 或回声 \$FOO 我已经在 pod 级别和容器级别进行了尝试。

当我描述创建的 pod 时,我只得到以下环境变量:

Environment:                                                                                                                               
  JENKINS_LOCATION_URL:     http://ldn1-kube1:31000/                                                                                       
  JENKINS_SECRET:           107cb696a8792f998fd41b6ccacf833ea74941fc9a95c39c4b2a1cde4c008b35                                               
  JENKINS_JNLP_URL:         http://10.233.60.248:8080/computer/kubernetes-57beb710bfb44cea8f964d63049b2942-355760c790d6b/slave-agent.jnlp  
  JENKINS_TUNNEL:           10.233.60.248:50000                                                                                            
  JENKINS_NAME:             kubernetes-57beb710bfb44cea8f964d63049b2942-355760c790d6b                                                      
  JENKINS_URL:              http://10.233.60.248:8080                                                                                      
  HOME:                     /home/jenkins                                                                                                  

【问题讨论】:

  • 你能运行kubectl get -o yaml pod -l mypod (我必须检查没有值的标签的语法,或者你当然可以得到 pod 的名称)看看 podTemplate 在现实生活中是如何应用的?我还发现它超级、超级、超级可疑,k8s 服务环境变量都不存在(KUBERNETES_SERVICE_HOSTKUBERNETES_SERVICE_PORT 等)
  • 谢谢马修。请在此处查看输出pastebin.com/vM5Pkzhc

标签: jenkins environment-variables kubernetes jenkins-pipeline


【解决方案1】:

将 kubernetes-plugin 升级到 0.12 (29/07/2017) 并重新启动 jenkins 已解决此问题!

【讨论】:

    【解决方案2】:

    我猜了一点,但我不认为podTemplate 中的envVars 功能齐全。和你一样,我对podTemplate 没有运气,但在containerTemplate 级别使用envVars 没有问题。简单的解决方法是在此处添加您的 envVars

    podTemplate(
      label: 'mypod',
      volumes: [
        persistentVolumeClaim(claimName: 'nfs-maven', mountPath: '/mnt/', readOnly: false)],
      containers: [
        containerTemplate(
          name: 'golang',
          image: 'golang',
          ttyEnabled: true, 
          command: 'cat',
          envVars: [containerEnvVar(key: 'FOO', value: 'BAR')]
        )
      ]
    )
    {
      node('mypod') {
        stage('test env') {
    
            container('golang') {
                stage('build') {
                    sh 'echo $FOO'
                    sh 'sleep 3600'
                }
            }
        }
      }
    }
    

    【讨论】:

    • 谢谢,恐怕还是没有运气,同样的问题。
    猜你喜欢
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 2016-03-13
    相关资源
    最近更新 更多