假设我们在GitHub上有一些开源项目及其源代码。我想把它部署到一些服务器上,让人们访问一些信息丰富的页面/工具/任何东西,这以某种可信的方式通知人们,它被有效地部署到服务器上的正是存储库中的代码。
有什么可以帮上忙的吗?也许是像Travis-CI这样的开源工具,可以帮助验证是否使用X分支的最新代码完成了部署?或者,也许有一种已知的方法可以使用可部署源代码的某种校验和来实现这一点?
任何帮助/指导都将不胜感激。
发布于 2019-04-20 09:15:11
这是一个构建问题:您需要能够在编译后的交付中包含校验和,该校验和显示了所说的可交付内容是从哪个来源编译的。
这取决于您的编译语言。
例如,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 commit作为一个标志。
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。
https://stackoverflow.com/questions/55554855
复制相似问题