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

$ 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"
            }
        }
    }
}

我总是收到这样的错误:
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
    ```
    
  • ... 我尝试了更多

  • 但是当我删除 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
    

    最佳答案

    原来,管道的名字 X's Pipeline 有一个 ' ;并且 Jenkins 在使用 GUI 时没有逃避它或警告用户!!!!!! 。将管道重命名为 X Pipeline 后,它工作正常。之前知道这一点可以为我节省数小时的麻烦……

    关于shell - Jenkins shell 脚本意外的文件结尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50853134/

    10-16 22:31