Tengo un script de canalización de Jenkins.

Dentro de esto, esto funciona:

sh("/my/path/to/git status")

Sin embargo, si lo intento:

sh("alias git='/my/path/to/git' && git status")

O

sh("alias git='/my/path/to/git'")
sh("git status")

Estos no funcionan: script.sh: line 2: git: command not found

Me gustaría que el segundo y tercer código funcionen también. ¿Cómo puedo hacer eso?

0
octavian 6 mar. 2017 a las 16:41

2 respuestas

La mejor respuesta

No se garantiza que las llamadas sh consecutivas mantengan el estado (incluidas las variables de entorno).

Cree un script en su proyecto y llámelo en una sola instrucción sh, ya sea eso o use:

sh """
  alias git='/my/path/to/git'
  git status
"""
1
amuniz 6 mar. 2017 a las 18:31

Estas líneas

sh("alias git='/my/path/to/git'")
sh("git status")

Crear dos subcapas. El primero crea su alias, y luego sale inmediatamente. El segundo se inicia sin conocimiento del shell anterior o su alias.

La versión anterior

sh("alias git='/my/path/to/git' && git status")

Tampoco funciona en un shell interactivo local, incluso cuando && se reemplaza por ;, claramente el alias simplemente no tiene efecto hasta el final de la lista de comandos actual.

Si debe usar un alias, debe agregarlo a cualquier archivo de shell (.bashrc, .profile, etc., etc.) al iniciar un shell. Sin embargo, tenga en cuenta que los alias de todos modos no se pueden expandir en shells no interactivos a menos que usted shopt -s expand_aliases.

De lo contrario, la solución habitual sería agregar /my/path/to a su $PATH.

1
Useless 6 mar. 2017 a las 13:57