基于GitLab CI搭建Golang自动构建环境

基于GitLab CI搭建Golang自动构建环境 Golang发布遇到的问题

对于golang的发布,之前一直没有一套规范的发布流程,来看看之前发布流程:

方案一

开发者本地环境需要将环境变量文件改为正式环境配置

编译成可执行文件

发送给运维

(运维)将文件覆盖为线上

(运维)重启进程

(可谓“又臭又长”)

方案二

开发者讲代码commit到gitlab上交给运维同学

(运维)pull代码

(运维)编译成可执行文件

(运维)覆盖线上文件

(运维)重启进程

这种对于运维属于重度依赖,而运维同学又需要去关心代码的编译,增加了运维同学的工作了。

以上两种方案都是之前项目中发生过的,对于发版来说可谓是一种“噩梦”,易出错,流程长,运维要是不在根本无法操作。

解决方案

为了解决上面提到的两种发布问题,目前我们做了如下的设计方案:

基于GitLab CI搭建Golang自动构建环境

开发者提交代码到GitLab服务器

添加一个Tag触发构建(.gitlab-ci.yml+makefile)

将构建后的文件打包添加上版本号(1.0.0+)后推送到版本服务器

在Jenkins选择对应的版本号发布到指定Web Server上

发布时,开发只需要编写“.gitlab-ci.yml”以及makefile对项目进行构建,而运维只需要配置jenkins,将文件发布到Web Server上即可,完成了开发和运维的解耦。

什么是GitLab-CI

GitLab CIGitLab Continuous Integration (Gitlab 持续集成)的简称。从 GitLab 的 8.0 版本开始,GitLab 就全面集成了 Gitlab-CI,并且对所有项目默认开启。只要在项目仓库的根目录添加 .gitlab-ci.yml 文件,并且配置了 Runner(运行器),那么每此添加新的tag都会触发 CI pipeline

一些概念

在介绍 GitLab CI 之前,我们先看看一些持续集成相关的概念。

基于GitLab CI搭建Golang自动构建环境

Pipeline

一次 Pipeline 其实相当于一次构建任务,里面可以包含多个流程,如安装依赖、运行测试、编译、部署测试服务器、部署生产服务器等流程。 任何提交或者 Merge Request 的合并都可以触发 Pipeline,如下图所示:

+------------------+           +----------------+
|                  |  trigger  |                |
|   Commit / MR    +---------->+    Pipeline    |
|                  |           |                |
+------------------+           +----------------+
Stages

Stages 表示构建阶段,说白了就是上面提到的流程。 我们可以在一次 Pipeline 中定义多个 Stages,这些 Stages 会有以下特点:

所有 Stages 会按照顺序运行,即当一个 Stage 完成后,下一个 Stage 才会开始

只有当所有 Stages 完成后,该构建任务 (Pipeline) 才会成功

如果任何一个 Stage 失败,那么后面的 Stages 不会执行,该构建任务 (Pipeline) 失败

因此,Stages 和 Pipeline 的关系就是:

+--------------------------------------------------------+
|                                                        |
|  Pipeline                                              |
|                                                        |
|  +-----------+     +------------+      +------------+  |
|  |  Stage 1  |---->|   Stage 2  |----->|   Stage 3  |  |
|  +-----------+     +------------+      +------------+  |
|                                                        |
+--------------------------------------------------------+
Jobs

Jobs 表示构建工作,表示某个 Stage 里面执行的工作。 我们可以在 Stages 里面定义多个 Jobs,这些 Jobs 会有以下特点:

相同 Stage 中的 Jobs 会并行执行

相同 Stage 中的 Jobs 都执行成功时,该 Stage 才会成功

如果任何一个 Job 失败,那么该 Stage 失败,即该构建任务 (Pipeline) 失败

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygdwj.html