如何在Jenkinsfile中的函数中运行多个sh命令?

时间:2017-07-11 15:30:50

标签: jenkins jenkins-pipeline

鉴于以下Jenkinsfile:

@NonCPS
void touchFiles() {
    sh "touch foo"
    sh "touch bar"
}

node('general') {
    touchFiles()

    sh "ls"
}

我在Jenkins的控制台日志中看到以下内容:

Running on box35 in /internal/slave/build/workspace/1499786637.EXAMPLE_test-repo_test_jenkinsfile
[Pipeline] {
[Pipeline] sh
[1499786637.EXAMPLE_test-repo_test_jenkinsfile] Running shell script
+ touch foo
[Pipeline] sh
[1499786637.EXAMPLE_test-repo_test_jenkinsfile] Running shell script
+ ls
foo

请注意,尚未创建“bar”。

为什么只有第一个sh在这里运行?如何在Jenkins文件中分解出一系列sh调用?

(我知道我可以写sh "touch foo; touch bar"但是在更复杂的Jenkins文件中,我有时需要单独的sh调用。)

2 个答案:

答案 0 :(得分:2)

除了@arifCee的回答,你可以这样做:

@NonCPS
void touchFiles() {
    sh '''
    touch foo
    touch bar
    '''
}

node('general') {
    touchFiles()

    sh "ls"
}

答案 1 :(得分:0)

尝试一个sh命令并连接你的参数:

@NonCPS
void touchFiles() {
    sh "touch foo;" +
       "touch bar"
}

node('general') {
    touchFiles()

    sh "ls"
}