Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-63839

container() doesn't work inside environment block

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Minor Minor
    • None
    • Jenkins 2.235.5 (official docker image)
      Pipeline: Declarative 1.7.2
      Kubernetes plugin 1.27.1.1

      The following declarative pipeline does not run the desired code in the JNLP container:

      final pod = '''
      apiVersion: v1
      kind: Pod
      spec:
        containers:
          - name: busybox
            image: busybox
            command: ['/bin/sh', '-c', 'sleep infinity & wait']
      '''
      
      final block = {
        sh returnStdout: true, script: 'git --version'
      }
      
      pipeline {
        agent {
          kubernetes {
            yaml pod
            defaultContainer 'busybox'
          }
        }
      
        environment {
          one = container('jnlp', block)
          two = container('jnlp') {
            sh returnStdout: true, script: 'git --version'
          }
        }
      
        stages {
          stage('A') {
            steps {
              sh 'echo $one'
              sh 'echo $two'
            }
          }
        }
      }
      

      So the assignment of environment variable one succeeds but two fails with a message like:

      /home/jenkins/agent/workspace/_test@tmp/durable-96f999a3/script.sh: line 1: git: not found
      

          [JENKINS-63839] container() doesn't work inside environment block

          Vincent Latombe added a comment - - edited

          Looks like a declarative bug, or an unsupported syntax. Doesn't seem to be related to the kubernetes plugin.

          Attached the generated step tree view from the above pipeline, we can clearly see the second call isn't nested under container('jnlp').

          Vincent Latombe added a comment - - edited Looks like a declarative bug, or an unsupported syntax. Doesn't seem to be related to the kubernetes plugin. Attached the generated step tree view from the above pipeline, we can clearly see the second call isn't nested under container('jnlp') .

            Unassigned Unassigned
            tavin Tavin Cole
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated: