Запуск робота в Jenkinsfile не получает правильный файл test.robot из Github

Итак, у меня есть школьный проект, который доставлял мне столько головной боли на каждом этапе пути. Он расположен на Github и запускается через Jenkins как проект конвейера, параметризованный параметрами git для ветвей. Есть 2 ветки: основная и b1, и это мой файл Jenkins.

pipeline {
    agent any
    stages { 
        stage('build'){
           steps{
               sh "mvn compile"
           }
        }
        stage('Test') {
            steps{
                sh "mvn test"
            }
            post {
                always {
                    jacoco(
                        execPattern: 'target/*.exec',
                        classPattern: 'target/classes',
                        sourcePattern: 'src/main/java',
                        exclusionPattern: 'src/test*'
                    )
                    junit '**/TEST*.xml'
                }
            }
        }
        stage('Run Robot and Post Test') {
            steps{
                sh script: 'python -m robot C:/Users/ersha/.jenkins/workspace/Pär_Ershag/Selenium/test.robot', returnStatus: true
            }
            post {
                always {
                    robot outputPath: 'C:/Users/ersha/.jenkins/workspace/Pär_Ershag@2', passThreshold: 100.0, unstableThreshold: 70.0, onlyCritical: false
                }
            }
        }
    }
}

Моя проблема заключается в том, что независимо от того, какую ветку я выберу для сборки, она всегда будет использовать старую версию test.robot, расположенную по тому же пути, что и сценарий шага sh: «python -m robot...». Main и b1 имеют разные версии файла, но ни одна из них не запускается. И это несмотря на наличие шага «очистка перед оформлением заказа» в дополнительных действиях.

Я сравнил свой файл Jenkins с другими файлами, выполняющими тот же проект, и самая большая разница заключается в том, что этап «Запустить робота и провести тестирование» указан как: bat "робот их путь test.robot"

По какой-то причине я не могу использовать bat для своих шагов, хотя я использую Windows, поэтому мне пришлось использовать sh и скрипт в Jenkins, чтобы заставить его работать.

PS: Я новичок в Дженкинсе, поэтому я еще многого не понимаю.


50
1

Ответ:

Решено

Использование жестко закодированных путей в большинстве случаев является плохой идеей.

Jenkins имеет встроенную переменную для ссылки на фактическое рабочее пространство агента/узла. В вашем примере я бы попробовал:

(...)
stage('Run Robot and Post Test') {
            steps{
                sh script: 'cd ${WORKSPACE} && python -m robot Pär_Ershag/Selenium/test.robot', returnStatus: true
            }
            post {
                always {
                    robot outputPath: '${WORKSPACE}/Pär_Ershag@2', passThreshold: 100.0, unstableThreshold: 70.0, onlyCritical: false
                }
            }
        }