Continuous integration 具有go依赖包的可复制版本

Continuous integration 具有go依赖包的可复制版本,continuous-integration,go,packaging,release-management,Continuous Integration,Go,Packaging,Release Management,我正在阅读“如何编写Go代码”教程,我不禁想知道如何建立一个稳定的工作流程 当然,我的代码将置于源代码控制之下,比如Git。现在,我希望能够做到以下几点: 构建我的项目的可执行文件——并确保对于给定的Git版本,可执行文件将构建相同的文件 为我的项目运行一个连续构建,以便在每次提交时激活。我需要确保连续构建所做的任何事情在我的工作站上都是可复制的 创建我的项目的发行版。我需要知道,如果我从同一git版本的代码中再次执行此操作,则可以重新创建发布 Go为它提供了“Go-get”工具——但这就是

我正在阅读“如何编写Go代码”教程,我不禁想知道如何建立一个稳定的工作流程

当然,我的代码将置于源代码控制之下,比如Git。现在,我希望能够做到以下几点:

  • 构建我的项目的可执行文件——并确保对于给定的Git版本,可执行文件将构建相同的文件
  • 为我的项目运行一个连续构建,以便在每次提交时激活。我需要确保连续构建所做的任何事情在我的工作站上都是可复制的
  • 创建我的项目的发行版。我需要知道,如果我从同一git版本的代码中再次执行此操作,则可以重新创建发布
Go为它提供了“Go-get”工具——但这就是我感到困惑的地方。应该支持这个“go-get”的工具设置依赖包的源代码控制repo。这给了我以下问题:

  • 我不能将依赖包置于我自己的源代码管理之下。这意味着,如果我和我的合作者,或者我和我的持续构建系统之间存在任何环境差异,我们将很难找出这些差异
  • 如果网络瘫痪,我将无法从头开始构建代码。或者,换一种方式来说,我的持续构建系统在每次构建版本时都必须攻击所有这些外部服务器。这可能是脆弱的,甚至不是我愿意让外界知道的
  • Go定义了一个同步包版本与基础语言版本的约定,但不能保证包作者会遵循该约定。如果他们不这样做,一个干净的工作区将接收到一个可能被破坏的任意版本
  • 如果我依赖的项目被放弃,我可能会失去构建程序的能力
  • 我可以通过手动导入依赖项目的代码而不使用“go-get”来解决这些问题,但是,我避免使用专门为该用途设计和推广的语言工具


    有什么建议吗?我遗漏了什么吗?

    go get只是使用分布式版本控制系统,而source repo则使用分布式版本控制系统。它将使用回购协议的本地副本。我会尽力解决你的每一个问题

  • 如果您愿意,您当然可以在本地回购协议中进行修改并提交 需要
  • go get使用它首先构建的本地存储库,除非您告诉它显式更新
  • go get不会将存储库吹走,它仍然会在那里。既然所有的来源 go-get理解的控制系统是分布式源代码控制系统,没有 原因是你不能让项目的一个分支自己进行

  • go get只是使用分布式版本控制系统源repo的使用。它将使用回购协议的本地副本。我会尽力解决你的每一个问题

  • 如果您愿意,您当然可以在本地回购协议中进行修改并提交 需要
  • go get使用它首先构建的本地存储库,除非您告诉它显式更新
  • go get不会将存储库吹走,它仍然会在那里。既然所有的来源 go-get理解的控制系统是分布式源代码控制系统,没有 原因是你不能让项目的一个分支自己进行