这是我在Jenkinsfile中使用的一段代码。
该问题位于sha256sum检查中。
它不起作用,但是两个sha256相等。
stage('Validate') {
docker.image('alpine:latest').inside("-u root") {
sh '''
apk add make bash curl && \
export terraform_ver=0.12.7 && \
export terraform_url=https://releases.hashicorp.com/terraform/${terraform_ver}/terraform_${terraform_ver}_linux_amd64.zip && \
export terraform_sha256=$(curl https://releases.hashicorp.com/terraform/\${terraform_ver}/terraform_\${terraform_ver}_SHA256SUMS | grep linux_amd64 | awk \'{print \$1}\') && \
curl -Ls --fail -o /tmp/terraform.zip ${terraform_url} && \
sha256sum /tmp/terraform.zip
echo "${terraform_sha256} /tmp/terraform.zip" | sha256sum -c && \
unzip /tmp/terraform.zip -d /usr/local/bin && \
make test-validate
'''
}
}
Jenkins的结果是:
+ sha256sum /tmp/terraform.zip
a0fa11217325f76bf1b4f53b0f7a6efb1be1826826ef8024f2f45e60187925e7 /tmp/terraform.zip
+ echo 'a0fa11217325f76bf1b4f53b0f7a6efb1be1826826ef8024f2f45e60187925e7 /tmp/terraform.zip'
+ sha256sum -c
sha256sum: WARNING: 1 of 1 computed checksums did NOT match
我试图替换
echo "${terraform_sha256} /tmp/terraform.zip" | sha256sum -c
作者
echo \"${terraform_sha256} /tmp/terraform.zip\" | sha256sum -c
但是它不起作用。
我认为问题出在这个双引号上...
sha256相等,所以我希望sha256sum检查不会失败。
答案 0 :(得分:0)
sha256sum
期望校验和与文件名之间有两个空格。您必须echo
才能成功sha256sum -c
。
双引号不应 进行转义。将引号放在字符串周围可确保例如参数之间的空格将保留。另请参见When to wrap quotes around a shell variable?
(您在调试输出中看到的sh -x
的输出将单引号放在字符串周围,以便您可以准确地看到它们的界线。)