Как заставить Jenkins выполнить шаги конвейера из удаленного каталога root? - PullRequest
0 голосов
/ 10 апреля 2020

Я создал простую линию в Дженкинс. В каталоге remote root моего агента указан путь моего проекта root. Но когда я тестирую, где я нахожусь во время сборки (например, определяя шаг, подобный sh 'pwd'), я вижу, что каталог, из которого выполняются мои шаги, это каталог $WORKSPACE (/path_to_remote_root_directory_of_the_agent/workspace/jenkins_project_title). Это означает, что я не могу просто запустить ни свои модульные тесты, такие как sh 'vendor/bin/phpunit ./test/Unit', ни другие задачи, которые я обычно запускаю из папки проекта root.

Я почти уверен, что просто что-то неправильно настроил и что в обычном случае сценарии, такие как , это

pipeline {
    agent {
        label 'devvm-slave-01'
    }

    stages {
        stage('Prepare') {
            steps {
                sh 'composer install'
                ...
            }
        }
        ...
        stage('Checkstyle') {
            steps {
                sh 'vendor/bin/phpcs --report=checkstyle --report-file=`pwd`/build/logs/checkstyle.xml --standard=PSR2 --extensions=php --ignore=autoload.php --ignore=vendor/ . || exit 0'
                checkstyle pattern: 'build/logs/checkstyle.xml'
            }
        }
    }
}

работают должным образом без каких-либо грубых обходных путей для путей.

Что я делаю неправильно и как чтобы он работал правильно?

1 Ответ

0 голосов
/ 11 апреля 2020

Из раздела " агент " главы " Jenkins " " Синтаксис конвейера ":

Параметры

узел

agent { node { label 'labelName' } } ведет себя так же, как агент { label 'labelName' }, но узел допускает дополнительные параметры (такие как customWorkspace ).

Итак, решение заключается в использовании опции node и customWorkspace:

pipeline {
    agent {
        node {
            label 'devvm-slave-01'
            customWorkspace '/path/to/my/project'
        }
    }
    ...
}
...