从 Jenkinsfile 调用 gradlew

Call gradlew from Jenkinsfile

我的项目在根目录中包含一个 gradlew shell 脚本和一个 Jenkinsfile。 Jenkins 文件包含:

import jenkins.model.Jenkins
node('jnlp-slave-with-java-build-tools') {
    sh 'gradlew build -x check'
}

当我将它推送到我的存储库时,Jenkins 找到了 Jenkinsfile 并尝试 运行 gradlew。但是,它失败了,通知我:

Running on ECS-2d51eb80546b7 in /home/jenkins/workspace/tems_chore_add-jenkins-file-7VBJJMGP4JS3QPUSNL2ROWDE3ECV5A4EJQJ6Z5VCSPDK7UABIPVQ
[Pipeline] {
[Pipeline] sh
[tems_chore_add-jenkins-file-7VBJJMGP4JS3QPUSNL2ROWDE3ECV5A4EJQJ6Z5VCSPDK7UABIPVQ] Running shell script
+ gradlew build -x check
/home/jenkins/workspace/tems_chore_add-jenkins-file-7VBJJMGP4JS3QPUSNL2ROWDE3ECV5A4EJQJ6Z5VCSPDK7UABIPVQ@tmp/durable-838b5837/script.sh: 2: /home/jenkins/workspace/tems_chore_add-jenkins-file-7VBJJMGP4JS3QPUSNL2ROWDE3ECV5A4EJQJ6Z5VCSPDK7UABIPVQ@tmp/durable-838b5837/script.sh: gradlew: not found
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline

GitHub has been notified of this commit’s build result

ERROR: script returned exit code 127
Finished: FAILURE

如何修改我的 Jenkinsfile 以便找到 gradlew 脚本并且 运行 正确?

跟进 #1

以下:

import jenkins.model.Jenkins
node('jnlp-slave-with-java-build-tools') {
    sh './gradlew build -x check'
}

结果:

tems_chore_add-jenkins-file-7VBJJMGP4JS3QPUSNL2ROWDE3ECV5A4EJQJ6Z5VCSPDK7UABIPVQ] Running shell script
+ ./gradlew build -x check
/home/jenkins/workspace/tems_chore_add-jenkins-file-7VBJJMGP4JS3QPUSNL2ROWDE3ECV5A4EJQJ6Z5VCSPDK7UABIPVQ@tmp/durable-3c901cf0/script.sh: 2: /home/jenkins/workspace/tems_chore_add-jenkins-file-7VBJJMGP4JS3QPUSNL2ROWDE3ECV5A4EJQJ6Z5VCSPDK7UABIPVQ@tmp/durable-3c901cf0/script.sh: ./gradlew: not found

所以仍然出现 'not found' 错误。

跟进#2

运行:

import jenkins.model.Jenkins
node('jnlp-slave-with-java-build-tools') {
    files = sh (script: 'ls -l',
                returnStdout: true).trim()
    echo "${files}"

    sh './gradlew build -x check'
}

输出total 0,提示可能是我错了,目录或者有权限问题?欢迎提出建议!

结果证明这是我的误会:我以为 Jenkins 会在 之前 删除回购 运行 我的 Jenkinsfile,但这不是事实并非如此,我需要自己添加:

checkout scm

我现在收到一个不相关的错误。

documentation 中对此进行了介绍,但我误以为在我的设置中不需要它。