Jenkins shell脚本意外文件结尾

4

我使用Docker以以下方式启动了一个新的Jenkins服务器:

$ docker run -p 8081:8080 -p 50000:50000 -v "${PWD}"/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -d --name jenkins jenkins/jenkins:lts

我希望将其用于一个简单的流水线,执行一个构建另一个Docker容器的shell脚本。这就是为什么我也要挂载 docker.sock 的原因。但是,使用如下所示的Jenkinsfile:

pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                echo "####### builds: #######"
                sh "(exit 1) || true # whatever I write here, it always fails"
            }
        }
    }
}

I always get an error like:

Print Message -- ####### builds: ####### -- (self time 7ms)
####### builds: ####### 

Shell Script -- (exit 1) || true -- (self time 18s)
[X's Pipeline] Running shell script sh: 1: Syntax error: end of file unexpected (expecting "done")
process apparently never started in /var/jenkins_home/workspace/X's Pipeline@tmp/durable-f294beff 

sh行替换为以下任何一行都会产生类似的错误消息,并导致构建过程失败:

  • sh "pwd;"
  • sh "echo 'hello';"
  • sh ./build.sh;"
  • sh ```
    #!/bin/sh
    echo hello
    ```
    
  • … I tried many more

但是当我删除sh这一行后,构建成功了。 我之前在其他系统上也成功地完成过这个操作。这里有什么我漏掉的吗?


  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-514.26.2.el7.x86_64
      Architecture: x86-64

    Docker version: 17.05.0-ce, build 89658be
1个回答

12
事实证明,管道的名字 X's Pipeline 中有一个 ';Jenkins 没有转义它或在使用 GUI 时警告用户 !!!!!!。将管道重命名为 X Pipeline 后就没问题了。如果之前知道这个问题,我可以节省几个小时的麻烦......

天哪,我也遇到了同样的问题,它让我感到非常疯狂。如果没有看到这个解决方法,我不确定我是否能够找到问题所在!我无法相信他们不禁止在项目名称中使用撇号,除非他们可以正确处理它们。 :/ - Micah Yoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接