Различные рабочие каталоги в конвейере Дженкинса - PullRequest
0 голосов
/ 22 сентября 2018

Вот простая конвейерная работа Jenkins, которая выделяет различные рабочие каталоги, видимые sh против script.

pipeline {
  agent any

  stages {
    stage('Stage1') {
      steps {
        sh """
        pwd
        """
        script {
          echo "cwd--pwd: "+ "pwd".execute().text
        }
      }
    }
  }
}

Вот как был запущен экземпляр Jenkins

/Users/MyJenkinsUser/dirJenkinsLaunched$ java -jar /Applications/Jenkins/jenkins.war --httpPort=8080

Вот вывод на консоль задания ...

Started by user MyJenkinsUser
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] node
Running on Jenkins in /Users/MyJenkinsUser/.jenkins/jobs/TestPipeline/workspace
[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Stage1)
[Pipeline] sh
[workspace] Running shell script
+ pwd
/Users/MyJenkinsUser/.jenkins/jobs/TestPipeline/workspace
[Pipeline] script
[Pipeline] {
[Pipeline] echo
cwd--pwd: /Users/MyJenkinsUser/dirJenkinsLaunched
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

Мне любопытно, что это будут разные рабочие каталоги, команда оболочки sh step использует рабочее пространство в качестве рабочего каталога, а groovy script step использует каталог, в котором запущен процесс Jenkins.

Вопрос : как сделать так, чтобы мои шаги сценария конвейера Jenkins (script) по умолчанию использовали рабочее пространство в качестве рабочего каталога?


Полагаю, что после того, как это станет ясно, имеет смысл, что groovy - это java, и мы запускаем файл войны Дженкинса из java, и этот запуск накладывает определенный рабочий каталог.Интересно происхождение этого дизайна для поведения Дженкинса.Это сделало меня немного странным с кучей ошибок, связанных с отсутствием файлов, так как я портировал некоторые команды sh в более содержательный синтаксис groovy, потому что я хотел избежать всего сумасшествия двойного вложения, в которое можно попасть в оболочку, особеннокогда пробелы вызываются в путях, а что нет.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Вы не должны использовать execute() в конвейерах Jenkins.Используйте конвейерные шаги DSL вместо произвольного кода Groovy.

Как вы заметили, этот такой "нативный" код выполняется на мастере Jenkins и не имеет никакого отношения к текущему заданию.

0 голосов
/ 22 сентября 2018

К сожалению, это не может быть возможной операцией.Мне придется переделать код сценария, чтобы явно использовать переменную workspace вместо того, чтобы полагаться на текущий рабочий каталог, который использует Java.

Изменение текущего рабочего каталога в Java?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...