这是我第一次在一个小团队中从事公司内部项目。我或多或少掌握了 git。现在我正在为部署而苦苦挣扎。要点是这样的:
我们使用标准分支方案(master、develop、topic)。在本地编程和排版。有一个战斗服务器。它也是一个 git 服务器。它也是一个测试服务器 :) 该服务器包含 2 个 Web 应用程序。第一个我们从 master 分支中拉取 - 发布已准备就绪,第二个 - 从开发中 - 我们在 master 拉取之前进行测试。
因此,为了在生产环境(或至少在测试环境)中老生常谈地发布对功能分支的微小更改,我必须克服以下常规:
- 从功能切换到开发,更新分支。
- 合并功能,推送开发
- 切换到master,更新它
- 合并开发,推送 master
- 连接到生产服务器以拉取开发应用程序
- 连接到生产服务器,拉取主应用程序
- ???
- “然后请更正这封信”
- 转到 1
有没有可能以某种方式简化一切?我确定我做错了什么。
第 1-2 点是每个开发人员都执行的非常简化的过程(例如,删除了测试)。这是他的正常周期。
第 3-4 项是发布。它不应该由普通开发人员完成。它由发布经理(或分配给它的负责人)完成。并不是每次打喷嚏都这样做,而是根据流程——每两周一次或每天两次。
项目 5-8 通过按一个(最多两个按钮)或运行一个脚本来完成。它运行在一个特殊的构建服务器上(对于这样的小公司,它可以是一台用于构建、测试和存储库的机器)。构建脚本本身通常执行以下操作
此脚本编写一次,然后根据需要进行修改。
另外,应该补充这个脚本,以便它可以与 develop 分支一起工作。
现在让我们让生活更轻松。我们将此脚本添加到 git 服务器上的钩子中,以便在 developer / master 推送时,它会自动启动,并因此部署到测试服务器 / prod。普通程序员禁止merge to master。
现在一切看起来像这样。开发人员采用了一个功能,为它创建了一个分支,然后就完成了。在开发人员中合并后(或通过合并请求),其代码自动注入到测试环境中。如果突然间他弄坏了一切——他必须修理它。
如果这不起作用,您可以在 CI 上运行脚本 - 最流行的脚本之一是 jenkins。因此,部署只需单击一下即可。
问答
让我们首先分离实体。参与过程:
目前,所有服务器的任务由一个执行,分发包与代码一起存储。尽管如此,让我们将它们视为独立的,并以它们之间的低耦合为目标(就像在类之间的 OOP 中一样)。这将为我们的系统提供灵活性和更大的可扩展性。特别是,我们不会依赖同一磁盘附近的某些东西或在本地网络上可用的事实。
应该做什么:
在工作安排上:
工作示例
我建议对 GitLab.com 的示例进行实验(即我们将使用云服务)。选择是主观的,以下是论点:
反对意见:如果项目增长,总有一天免费许可证将不足以完成所有任务。
描述正在执行的脚本的主文件位于项目的根文件夹中,名为
.gitlab-ci.yml.我们将把依赖项放在npm - package.json 的配置中。该文件
gulpfile.js描述了compress提供最小化的任务。CI 管道窗口的屏幕截图:
工作的结果: archive
packaged.tar.gz, in itdists/hello.js, in it