代码之家  ›  专栏  ›  技术社区  ›  markussiebert

Golang:如何在github ci操作和m1 mca上本地构建确定性

  •  0
  • markussiebert  · 技术社区  · 3 年前

    我正在尝试构建确定性go可执行文件。我的构建脚本非常简单:

    #!/bin/bash
    
    BASEPATH=$(git rev-parse --show-toplevel)
    cd "$BASEPATH/lambda"
    GOOS=linux GOARCH=amd64 GOFLAGS="-trimpath" GOPROXY=https://proxy.golang.org,direct go build
    ls -la cdk-sops-secrets
    touch -t 202002020000 cdk-sops-secrets
    chmod 755 cdk-sops-secrets
    shasum cdk-sops-secrets
    ls -la cdk-sops-secrets
    

    这运行得很好,但在我的m1 mac和github操作运行中会生成不同的二进制文件/可执行文件。它们的大小和大小不同。即使我使用相同的docker图像(除了一个是arm,另一个是amd64)。

    有可能构建一个与我的代码完全相同的shasum/字节版本吗?

    0 回复  |  直到 3 年前
        1
  •  0
  •   markussiebert    3 年前

    此脚本在CI和本地构建相同的版本

    #!/bin/bash
    echo "GOROOT: $GOROOT / GOPATH: $GOPATH"
    BASEPATH=$(git rev-parse --show-toplevel)
    cd "$BASEPATH/lambda"
    export GOOS=linux 
    export GOARCH=amd64
    export GOPROXY=https://proxy.golang.org,direct
    export CGO_ENABLED=0
    go build -trimpath -buildvcs=false -ldflags="-s -w -buildid="
    ls -la cdk-sops-secrets
    shasum cdk-sops-secrets
    touch -t 202002020000 cdk-sops-secrets
    chmod 755 cdk-sops-secrets
    ls -la cdk-sops-secrets
    shasum cdk-sops-secrets
    
    推荐文章