基于gitlab的ci/cd系统重点记要

author author     2023-02-18     688

关键词:

参考技术A Gitlab是套功能完善的源码管理系统,平时用于公司内部各研发组的源码同步、问题跟踪、开发协同。Gitlab自带的CI/CD功能与Gitlab更简单、灵活的协同工作,也减小了日常维护的压力,因此,本文针对Gitlab的CI/CD功能做的要点分享。

基于GitLab的CI/CD系统由Gitlab与Gitlab-runner两个主要部分构成。

Gitlab源码库管理系统,提供基于Git的源码库管理、协作、权限等丰富的功能。

在Gitlab源码库的根目录中如果创建有`.gitlab-ci.yml`文件,相当于为当前源码库启用了CI/CD功能。

该文件用于控制CI/CD流程与行为,每次源码的提交、合并动作都会触发Gitlab执行当前操作分支上的该文件。

该文件中通过gitlab提供的关键字、预定义变量、脚本代码等等来规划pipeline和定义Job,实现依据条件控制不同Gitlab-Runner中的执行器进行需要动作,共同完成代码的编译、打包、发布等操作。

Gitlab-Runner运行在本地或远程目标机上的一个程序,作用是接收执行Gitlab的指令,比如编译、打包部署等等。

一个Gitlab可接入多个Gitlab-Runner,每个Runner可以注册多种相同或不同形式的“执行器”。

Runner与Gitlab联接需要通过Gitlab生成的Token,每个Runner对应且仅对应到一个唯一的Token。

Gitlab-Runner基于Go语言开发,可运行在多种系统平台。Gitlab-runner在Gitlab中有三种使用权限范围,第一种是全局共享,第二种是群组共享,第三种是项目特定。

Gitlab-Runner的作用是接收Gitlab指令,并控制与管理“执行器”的程序。具体动作执行则是由Runner派生出的“执行器”这个逻辑模块来完成,Runner支持多种“执行器”形式,有Shell,有Docker等等。

Gitlab-Runner的安装有两种方式,一种是直接安装到原生系统,另一种是以Docker容器方式进行安装。Runner安装完成后,需要执行Runner中的注册命令,建立与Gitlab的关联。

在注册过程中需要填入Gitlab服务器地址、Gitlab提供的Token、执行器形式,以及不同执行器的配置等等。

将Runner以原生系统方式进行安装(也可以以Docker形式安装),并在Runner注册时选择Docker执行器形式。

在注册过程中会要求指定一个Docker Image,该Docker Image是默认用于执行指令的实体(即在`.gitlab-ci.yml`中未指定Image时默认使用,也可以在Job中明确指定其它的Docker Image)。Runner注册完成后会在`/etc/gitlab-runner`中生成一个`config.toml`文件,如要修改Runner配置,可重新注册(重新注册原配置不会删除,原注册的执行器还保持有效,需要在Gitlab端删除)或修改该文件。另外,一个Runner实例可以配置多个同类型或不同类型的执行器。

执行器是用于Job执行不同的指令,因此执行器的环境需要依据Job的具体要求进行配置,比如用于Java构建,则执行器环境中需要支持jdk、maven等指令。由于本篇用的是Docker形式的执行器,因此在指定的DockerImage中要安装好JDK与MAVEN包(注:为了更好的利用自建的DockerImage,需要创建一个Docker私服,可以用Harbor或Nexus3来实现自定义的Docker Image的管理)。

每个Job都会重新启动一个新的容器,并且会自动完成源码库的下载(放在启动容器的`/build`目录中),并且这个不要求执行器镜像支持Git(原理不清楚,有清楚的欢迎评论区指教!),如何在Job中禁止下载原码还需要再学习(有清楚的欢迎评论区指教!)。

以下是`config.toml`文件及主要字段说明:

`.gitlab-ci.yml`文件必须在源码库的根目录中,该文件用于控制源码何时、何地、如何加工处理代码的配置脚本,并且需要符合`YAML`的格式与语法。

在该脚本中,通过`stages`关键字定义代码处理阶段,定义的上下顺序则是阶段执行次序。

然后就是各种各样的JOB定义,在Job中需要指明哪个阶段执行,在哪个执行器运行,什么条件下执行,以及执行的具体动作。多个不同的JOB可以关联到同一个阶段,实现并发处理不同的事务。

Gitlab为CI/CD提供了平台与机制,在微服务、异构系统开发时代CI/CD已成为必不可少的效率工具,也可以说是软件自动化生产线,但要用好和维护好一套CI/CD,需要有丰富的研发经验与广泛的系统知识。

如何使用 CI/CD 为 Gitlab 注册表推送基于 docker compose 的图像

】如何使用CI/CD为Gitlab注册表推送基于dockercompose的图像【英文标题】:HowcanIpushdockercomposebasedimagesforGitlabRegistryUsingCI/CD【发布时间】:2021-11-2509:53:15【问题描述】:我已经使用docker-compose链接了PostgresDB和API图像,它在本地工作,... 查看详情

gitlabci/cd配置-并发送消息到飞书

...自动化,在开发和运营团队之间架起了桥梁。官方文档:GitLabCI/CD|GitLabGitLabCI/CD是一个内置于GitLab的工具,用于通过连续方法进行软件开发:参考文档:https://docs.gitlab.com/runner/install/GitLabRunner是一个与GitLabCI/CD配合使用以在管道... 查看详情

GitLab CI/CD 脚本改进

】GitLabCI/CD脚本改进【英文标题】:GitLabCI/CDScriptImprovement【发布时间】:2021-10-1411:43:47【问题描述】:下面是我的第一个静态网站的gitlab-ci.yml脚本。它正是我需要的。它不需要每个Angular或React的构建过程。有没有人看到改进的... 查看详情

GitLab Runner CI/CD 中用户模式和系统模式之间的区别

】GitLabRunnerCI/CD中用户模式和系统模式之间的区别【英文标题】:differencebetweenuser-modeandsystem-modeinGitLabRunnerCI/CD【发布时间】:2019-02-1207:38:23【问题描述】:在系统模式下配置GitLab运行器时,服务没有启动,但在用户模式下,服... 查看详情

基于k8s的ci/cd系统

参考技术A基于k8s搭建的一套CI/CD系统,其目的是方便k8s和服务端相关技术的实践,在搭建过程中会涉及docker、dockerhub、k8s、github、jenkins、kubesphere一台Mac物理机+3台Centos虚拟机Docker是这个教程的基石,对Docker一点都不了解的同学... 查看详情

Flutter 集成测试和 Gitlab CI/CD

...布时间】:2021-01-1505:28:35【问题描述】:我正在尝试使用基于thistutorial的Fastlane和GitLab为我的Flutter应用程序设置CI/CD,但是我在使用Flutter驱动程序自动化Flutter集成测试时遇到了一些困难。我遇到的问题是,当所有测试都成功完... 查看详情

Gitlab CI/CD 在“清理项目目录和基于文件的变量”时失败,并显示“错误:作业失败:退出代码 1”

】GitlabCI/CD在“清理项目目录和基于文件的变量”时失败,并显示“错误:作业失败:退出代码1”【英文标题】:GitlabCI/CDfailswhile"Cleaningupprojectdirectoryandfilebasedvariables"with"ERROR:Jobfailed:exitcode1"【发布时间】:2021-11-... 查看详情

gitlab-ci/cd(代码片段)

Gitlab-Runner自动构建服务器搭建1这里讲到的gitlab仓库指的是https://gitlab.com/,自建gitlab仓库也基本相同。项目的构建打包过程相对比较消耗系统性能,所以gitlab将这部分任务都交给了gitlab-runner来做,因为gitlab-runner可以部署到不同... 查看详情

gitlab的ci/cd配置管理(代码片段)

gitlab的CI/CD配置管理(二)标签(空格分隔):运维系列一:gitlabCI/CD介绍二:配置gitlab的CI/CD的runner三:代码的MAVEN打包环境四:配置gitlab的CI文件五:发布项目一:gitlabCI/CD介绍1.1gitlabCI/CD概述Gitlab是常用的开源git代码管理工具... 查看详情

ci/cd之搭建私有git仓库gitlab(代码片段)

私有仓库GitlabGitlab简介CI/CD安装GitlabGitlab使用Gitlab简介GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。安装方法是参考GitLab在GitHub上的Wiki页面。Gitlab官方文档:... 查看详情

ci/cd之搭建私有git仓库gitlab(代码片段)

私有仓库GitlabGitlab简介CI/CD安装GitlabGitlab使用Gitlab简介GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。安装方法是参考GitLab在GitHub上的Wiki页面。Gitlab官方文档:... 查看详情

基于kubernetes实现ci/cd配置(代码片段)

基于Kubernetes实现CI/CD配置一、基本介绍二、基于Kubernetes实现CI/CD配置1.配置GitLab2.配置Jenkins3.实现CI/CD配置4.验证一、基本介绍基于Kubernetes实现CI/CD配置,其实和往常那些CI/CD配置并没有太大区别。都是通过提交代码,拉取... 查看详情

在哪里指定 GitLab ci/cd 管道的存储库凭据?

】在哪里指定GitLabci/cd管道的存储库凭据?【英文标题】:WheretospecifycredentialsoftherepositorytoGitLabci/cdpipeline?【发布时间】:2021-11-1704:53:39【问题描述】:我已在我的系统中安装了最新版本的SonarQube,并成功地将SonarQube与GitLab集成... 查看详情

基于kubernetes实现ci/cd配置(代码片段)

基于Kubernetes实现CI/CD配置一、基本介绍二、基于Kubernetes实现CI/CD配置1.配置GitLab2.配置Jenkins3.实现CI/CD配置4.验证一、基本介绍基于Kubernetes实现CI/CD配置,其实和往常那些CI/CD配置并没有太大区别。都是通过提交代码,拉取... 查看详情

rancher+gitlab+appveyor实现ci/cd流水线(汇总)(代码片段)

...CI/CD,成套使用,非常方便appveyor也是一个CI/CD解决方案,基于asp.netcore开发。其内置nugetserver,这里只用到nuget包管理,CI/CD的工作交给gitlab-runner相关教程Docker入门资料收集https://www.imooc.com/article/270101企业级容器管理平台Rancher介... 查看详情

Vue Cypress 和 Gitlab CI/CD

】VueCypress和GitlabCI/CD【英文标题】:VueCypressandGitlabCI/CD【发布时间】:2020-07-0309:01:03【问题描述】:我目前正在尝试使用他们的CI/CD平台在Gitlab上运行我的E2E测试。我目前的问题是我的开发服务器和cypress不能同时运行,以便E2E测... 查看详情

yml gitlab CI/CD 中的错误

】ymlgitlabCI/CD中的错误【英文标题】:ErrorinymlgitlabCI/CD【发布时间】:2018-12-1508:41:04【问题描述】:我有这个在gitlab-ci.ymlbuild_api:stage:buildscript:-dockerbuild--pull-t$CONTAINER_TEST_IMAGE.-dockerpush$CONTAINER_TEST_IMAGEonly:---->variable 查看详情

Gitlab CI/CD 中的秘密检测

】GitlabCI/CD中的秘密检测【英文标题】:SecretsDetectioninGitlabCI/CD【发布时间】:2021-05-0310:51:45【问题描述】:我在理解如何在GitlabCI/CD中激活秘密检测时遇到了一些麻烦。我从模板创建了一个新的NodeJSExpress,然后我从Settings>CI/CD... 查看详情