deployment - 公开验证开源代码是否按原样部署
问题描述
假设我们在 GitHub 上有一些开源项目及其源代码。我想将它部署到某个服务器,并让人们访问一些信息页面/工具/任何以某种值得信赖的方式通知它有效地部署到服务器的内容正是存储库中的代码。
有什么可以帮助解决这个问题吗?也许像 Travis-CI 这样的开源工具可以帮助验证部署是使用 X 分支的最新代码完成的?或者也许有一种已知的方法可以使用某种校验和用于可部署的源代码?
任何帮助/指导将不胜感激。
解决方案
这是一个构建问题:您需要能够在编译的交付中包含校验和,该校验和显示已编译交付物的来源。
这取决于您的编译语言。
例如,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) 密钥。
推荐阅读
- ansible - become_user 自动检测 ansible
- matlab - 使用matlab在奇点容器中的分段违规
- lambda - 在 Java8 中使用 Lambda 表达式对地图进行排序
- jenkins - 将 contains 与 Jenkins 表达式和 env var 一起使用
- bash - find 不会下降到某些目录
- javascript - Chrome 扩展程序创建选项卡并向其发送消息
- java - java - 如何使用计数子方法和Java中的目标字符串计算添加到列表数组的字符串?
- javascript - Mutation Observers:检测从父元素继承的可见性变化
- c++ - winrt/c++:等待分派任务的结果
- python - .DLL 加载来自 .EXE 但不是 .DLL