公开验证开源代码是否按原样部署

时间:2019-04-07 01:23:16

标签: deployment open-source travis-ci checksum verification

假设我们在GitHub上有一个开源项目及其源代码。我想将其部署到某些服务器上,并让人们访问一些信息丰富的页面/工具/任何内容,这些信息以某种可信赖的方式告知其实际上部署到服务器上的内容正是存储库中的代码。

有什么可以帮助解决这个问题的吗?也许像Travis-CI这样的开源工具可以帮助验证是否使用X分支中的最新代码完成了部署?也许有一种已知的方法可以对可部署的源代码使用某种校验和?

任何帮助/指导将不胜感激。

1 个答案:

答案 0 :(得分:-1)

这是一个构建问题:您需要能够在编译后的交付中包含校验和,以显示表示已编译交付物的来源。

这取决于您的编译语言。

例如,Go将使用构建标志(如in this example):

go build -i -v -ldflags="-X main.version=$(git describe --always --long --dirty)" github.com/MyUserName/MyProject

Travis-CI会use the same ldflags,但具有固定值。

This example只需将Git提交添加为标志。

script:
  - go get -t -v ./...
  - diff -u <(echo -n) <(gofmt -d .)
  - go vet $(go list ./... | grep -v /vendor/)
  - go test -v -race ./...
  # Only build binaries from the latest Go release.
  - if [ "${LATEST}" = "true" ]; then gox -os="linux darwin windows" \
      -arch="amd64" -output="logshare.." \
      -ldflags "-X main.Rev=`git rev-parse --short HEAD`" -verbose ./...; fi

同样,这是构建步骤,在部署步骤之前。
并为Go进行了说明,但该想法仍然适用于其他任何语言。

在运行时,该程序能够显示其版本,并让用户知道GitHub参考:他们可以检查该参考是用于构建的参考。


替代方法:signing a docker image

然后,您的Travis-CI可以将其应用于build stages for sharing that image
但是您将需要管理Docker Content Trust (DCT) keys