0 votes

Jenkinsfile ne reconnaît pas le bin local

J'essaie d'exécuter fastlane à l'aide de Jenkinsfile sur Mac mini.

Si je cours /usr/local/bin/fastlane -v le résultat est correct. Mais si j'essaie simplement avec fastlane -v alors j'obtiens

fastlane: command not found

fastlane -v fonctionne sur l'esclave Jenkins si j'ai juste à me connecter et à exécuter.

Pour déboguer cela, j'ai essayé d'exécuter echo $PATH par le biais de Jenkinsfile, a obtenu

/usr/bin:/bin:/usr/sbin:/sbin

Si je me connecte à l'esclave jenkins en tant que jenkins utilisateur & exécution echo $PATH j'obtiens

/Users/jenkins/.fastlane/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin

Pourquoi cette différence ?

C'est plist pour l'agent Jenkins.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.jenkins.ci</string>
        <key>UserName</key>
        <string>jenkins</string>
        <key>SessionCreate</key>
        <true/>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/bin/java</string>
          <string>-Djava.awt.headless=true</string>
      <string>-jar</string>
      <string>/Users/jenkins/agent.jar</string>
          <string>-jnlpUrl</string>
          <string>http://jenkins.example.com:8080/computer/jenkins2-slave3/slave-agent.jnlp</string>
          <string>-secret</string>
          <string>****************************</string>
          <string>-workDir</string>
          <string>/Users/jenkins/jenkins_slave/</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
        <key>KeepAlive</key>
        <true/>
    <key>StandardErrorPath</key>
    <string>/Users/jenkins/error.log</string>
    <key>StandardOutPath</key>
    <string>/Users/jenkins/stdout.log</string>
</dict>
</plist>

1voto

yoliho Points 340

Si l'exécution se fait à partir de launchd, le système d'exploitation exécute la commande directement et non par l'intermédiaire d'un shell. De plus, dans ce cas, Fastlane est exécuté en tant que Root.

Si vous utilisez le terminal ou ssh, vous démarrez un shell, en utilisant vos fichiers init, par exemple .zshenv .zshrc - Vos ajouts au chemin /Users/jenkins/.fastlane/bin:/usr/local/bin : seront dans un de ces fichiers shell.

C'est comme l'exécution à partir de crontab sur d'autres Unix. Il y a très peu d'environnement.

Les solutions comprennent donc toute combinaison de ces éléments

  1. utiliser les chemins complets des exécutables,
  2. faire en sorte que launchd exécute un shell script qui définit l'environnement et appelle ensuite les exécutables.
  3. ajouter des variables d'environnement au fichier .plist (voir la clé EnvironmentVariables) (je pense que PATH n'est pas paramétrable ici mais je peux me tromper).

Dans ce cas aussi, ajoutez le nom d'utilisateur dans le fichier .plist, dans la clé UserName.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X