首页 > 解决方案 > 公开验证开源代码是否按原样部署

问题描述

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

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

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

标签: deploymentopen-sourcetravis-cichecksumverification

解决方案


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

这取决于您的编译语言。

例如,Go 将使用构建标志(如本例所示):

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

Travis-CI 将使用相同的 ldflags,但具有固定值。

此示例只是将 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 引用:他们可以检查该引用是用于构建的引用。


替代方法:签署 docker 映像

然后,您的 Travis-CI 可以将其应用于构建阶段以共享该图像
但是您需要管理Docker 内容信任 (DCT) 密钥


推荐阅读