Saltar al contenido

Jenkins no reconoce el comando sh?

Comprende el código correctamente antes de usarlo a tu proyecto si tdeseas aportar algo puedes comentarlo.

La respuesta de Jonathan es correcta en el sentido de que modificar $PATH usando la configuración de la variable de entorno de Jenkins causa este problema, pero simplemente eliminar las personalizaciones de PATH que tiene probablemente hará que pierda funcionalidad, especialmente si tiene algún proyecto de estilo libre en su Jenkins.

Mira, en todo el resto del universo es muy común editar el $PATH configurándolo en tu cosa nueva más el $PATH existente, así:

PATH=/opt/blah/bin:$PATH

esto antepone /opt/blah/bin a lo que ya está en $PATH. Así que la final $PATH podría verse como: /opt/blah/bin:/usr/local/bin:/usr/sbin:/bin (esto es solo un ejemplo por supuesto)

Esto realmente funciona bien para los proyectos Jenkins Freestyle. Sin embargo, para los proyectos de Pipeline, por alguna razón, Jenkins no evalúa ni reemplaza la variable $PATH en la variable que configuró. Así que literalmente terminas con un camino de /opt/blah/bin:$PATH – ¡así que nada de lo que estaba allí antes todavía está en su $PATH!

Aparentemente, en lugar de solo corregir ese error, el proyecto Jenkins decidió (1) detectar la condición y mostrar una advertencia extraña (“Advertencia: JENKINS-41339 probablemente falso”) para implicar que debe verificar ese boleto y (2) crear un nuevo forma de definir adiciones a PATH, que es la mejor solución a su problema porque le permite personalizar $PATH sin romper todo. Haces esto en Jenkins->Configure System.

  • Defina una variable llamada PATH+EXTRA donde EXTRA aparentemente puede ser lo que sea.

  • En esa variable, simplemente ponga sus adiciones para la RUTA. Entonces, en mi ejemplo anterior, NO establecería PATH en absoluto, más bien simplemente establecería:
    PATH+EXTRA=/opt/blah/bin

  • Ahora elimine cualquier definido PATH variable.

Según un ticket relacionado, esto está documentado en algún lugar de Jenkins, pero no está documentado en el lugar donde debe estar, en Administrar Jenkins->Configurar sistema.

Así que parece que la razón fue que la propiedad global PATH estaba causando el problema. al ir a Manage Jenkins -> Configure System y borrando el PATH La propiedad global resolvió mi problema. Ver JENKINS-41339.

Para solucionar este problema, en caso de que no pueda eliminar la propiedad global PATH de “Administrar Jenkins -> Configurar sistema“, debe agregar el siguiente paso:

withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin'])

Como lo siguiente: para canalización con secuencias de comandos:

node 
  stage ('STAGE NAME') 
    withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin']) 
      sh '//code block'
    
  

o para canalización declarativa:

pipeline {
  agent 
    label 'master'
  

  stages {
    stage ('STAGE NAME') 
      steps 
        withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin'])   
          sh '''
            //code block
          '''
        
      
    

Espero que esto ayude. También luché mucho para encontrar una solución para esto.

Recuerda algo, que tienes autorización de glosar si te fue preciso.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *