gpt4 book ai didi

在 Jenkins 声明管道中找不到 Bash

转载 作者:行者123 更新时间:2023-12-02 18:09:34 25 4
gpt4 key购买 nike

我遇到 Jenkins 无法识别 bash 的问题。

我使用 golang 图像运行一个带有 docker agentstage。尝试运行 sh 文件时,我收到此错误:

+ ./build/docker/docker.sh /home/jenkins/workspace/003-CGI-App-setup-ACS-build-4ZEA3UO3JRWIGZRIGIBD7BRQJV7JJ4LAKTS4XDXT6N3GDVU7Z4WA@tmp/durable-46264c73/script.sh: line 1: ./build/docker/docker.sh: not found

这是我的舞台:

stage('Build & publish') {
agent {
docker {
image 'golang:1.10-alpine3.7'
}
}
steps {
checkout scm
unstash 'war'
sh 'export PATH=/bin/bash:$PATH'
sh 'cp XXX/XXX/target/*.war build/docker/ROOT.war'
sh 'chmod 777 ./build/docker/docker.sh'
sh 'go build -o XXX'
sh './XXX build'
sh './build/docker/docker.sh'
}
}

我的 docker.sh 文件也以 #!/bin/bash 开头。

有谁知道它是否与 docker 镜像有关?如果是,我是否正确添加了 bash?

谢谢。

最佳答案

许多轻量级 Docker 镜像,尤其是构建在 Alpine Linux 之上的镜像,不包含 GNU Bash。

此处最好的解决方案是重写您的脚本,使其不特别需要 bash。将其 shebang 行更改为 #!/bin/sh,并将其语法限制为 POSIX shell specification 中允许的内容.这对于大多数直接的“做 A、B、C,然后做 D”风格的脚本来说绰绰有余;如果您发现自己正在使用数组等特定于 bash 的功能,请考虑使用更强大的脚本语言,例如 Python。

具体在单行

sh 'export PATH=/bin/bash:$PATH'
  • 每个 sh 命令都在自己的执行环境中运行,环境干净,因此来自较早的 sh 语句的环境变量设置不会影响后面的;此声明是空操作。
  • $PATH 的元素是目录,而不是单个文件。
  • /bin 几乎需要位​​于 $PATH 上,并且它在所有标准执行环境中。 (如果 /bin/bash 存在,则显式 bash -c '...' 命令和 #!/bin/bash shebang 行将找到它。)

(造成此类问题的另一个常见原因是混合的 Windows/Linux 环境,其中实际的 shebang 行以 DOS 样式的 CR/LF 双字符换行符结尾,并且环境无法运行 /bin/bash\r.)

关于在 Jenkins 声明管道中找不到 Bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53853290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com