在詹金斯管道内进行sha256sum检查

时间:2019-08-29 11:23:25

标签: jenkins-pipeline

这是我在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检查不会失败。

1 个答案:

答案 0 :(得分:0)

sha256sum期望校验和与文件名之间有两个空格。您必须echo才能成功sha256sum -c

双引号不应 进行转义。将引号放在字符串周围可确保例如参数之间的空格将保留。另请参见When to wrap quotes around a shell variable?

(您在调试输出中看到的sh -x的输出将单引号放在字符串周围,以便您可以准确地看到它们的界线。)