所以我有一个学校项目,每一步都让我很头疼。它位于 Github 上,通过 Jenkins 作为管道项目运行,并使用分支的 git 参数进行参数化。有 2 个分支,main 和 b1,这是我的 Jenkinsfile
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 robots...' 所指的路径相同。 Main 和 b1 都有不同版本的文件,但都没有运行。尽管在其他行为中有“结帐前清洁”步骤,但还是如此。
我将我的 Jenkinsfile 与其他执行相同项目的人进行了比较,最大的区别是“运行机器人和后期测试”的阶段表述为: bat“机器人他们的测试.机器人路径”
由于某种原因,即使我使用 Windows,我也无法使用 bat 来执行我的步骤,因此我必须使用 sh 和 Jenkins 中的脚本才能使其工作。
ps:我对 Jenkins 还很陌生,所以还有很多东西我还不明白。
使用硬编码路径大多数时候是个坏主意。
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
}
}
}