GitlabCI/CD
官方文档:https://docs.gitlab.com/ee/ci/
主要分为三个部分:
Continuous Integration (CI) 持续集成
Continuous Delivery (CD) 持续交付
Continuous Deployment (CD) 持续部署
Gitlab CI/CD 组件
Gitlab CI/CD 是Gitlab代码仓库的一部分
GitlabRunner,是一个专门处理构建的应用程序,可以独立于Gitlab部署,并通过API与Gitlab CI/CD一起使用
.gitlab-ci.yml
配置文件,是告诉Runner怎么执行CI/CD的脚本
为了运行测试,至少需要一个Gitlab示例和一个GitlabRunner,并且提供.gitlab-ci.yml
文件。
Gitlab CI/CD 特点
多平台:使用Golang,支持多平台
多语言:构建脚本实际是由命令行驱动的,可以与多语言一同使用
稳定构建:Gitlab CI/CD 和 Gitlab Runner在不同的机器上运行
并行构建:Gitlab CI/CD 再多台机器上拆分构建,以实现快速执行
实时日志记录
灵活的管道:可以在每个阶段定义多个并行作业,并且可以触发其他构建
版本管道:一个
.gitlab-ci.yml
文件,包括测试、过程步骤、放置在仓库中,每个人都可以贡献更改,确保每个分支获得所需的管道自动缩放:可以在docker或者k8s中自动缩放构建机器
构建工件:可以将二进制文件和其他构建工件上载道Gitlab并浏览和下载他们
Docker支持、K8s支持
容器注册表:内置的容器注册表,用于存储、共享和使用容器镜像
受保护的变量:在部署期间使用受每个环境保护的变量安全的存储和使用机密
多环境:可以定义多个环境
Jenkins CI VS Gitlab CI
当代码新建立一个分支时,Jenkins需要重新配置一个新的构建,而Gitlab的
.gitlab-ci.yml
会被带入到新的分支中,会自动生成新的构建Jenkins支持定时构建,Gitlab则不支持定时构建,可以通过WebAPI使用同一台或者另一台服务器上的cronjob触发作业和管道。
Jenkins的权限管理粒度太粗,Gitlab则有完善的权限管理(与代码权限一致)
代码库的交互上,Jenkins可以支持多种代码仓库,而Gitlab ci与Gitlab深度绑定
插件管理上,Jenkins的插件很多,但是后期更新之后的成本较高。而Gitlab是开放式的,任何人都可以像代码库贡献更改,一旦合并,将自动测试并维护每个更改。
Gitlab没有统一的管理界面,无法统筹管理所有的项目
Gitlab配置依赖于代码仓库,耦合度没有jenkins低
Jenkins体量较大适合较大的团队,而Gitlab适合较小体量的团队,比如敏捷开发
工作原理
将代码托管到Gitlab
在项目的根目录创建ci文件:
.gitlab-ci.yml
,在文件中指定构建、测试和部署脚本Gitlab将检测道他并使用名为 GitlabRunner的工具运行脚本
脚本被分组为作业、他们共同组成了一个管道
Gitlab Runner
类似Jenkins的Agent,用于构建脚本任务的具体实例
Gitlab Runner 是一个开源项目,他与Gitlab CI结合使用,用于运行作业并将结果发送给Gitlab
Gitlab CI是Gitlab随附的用于协调作业的开源持续集成服务
Gitlab Runner 使用Go编写,可在Linux、MacOS、Windows操作系统执行
Gitlab Runner运行的Docker版本最少为 Docker v1.13.0
Gitlab Runner版本于Gitlab的版本同步
可以根据需要配置任意数量的Runner
多个Gitlab Runner可以并行执行作业
GitlabRunner实际通过ssh连接Docker容器、本地、通过SSH执行作业(支持Bash、Batch、PowerShell),也可以对Docker进行自动伸缩扩容
可以对Runner定义作业运行环境
自动重新加载配置,无需重启
Gitlab Runner的类型
shared 共享类型,运行整个平台项目的作业
group 项目组类型,运行特定group下的所有项目的作用
specific项目类型,运行指定的project项目作业
Gitlab Runner的状态
locked,锁定状态,无法运行项目作业
paused,暂停状态,暂时不会接收新的作业
安装 Gitlab Runner
官方文档:https://docs.gitlab.com/runner/install/
注册 Gitlab Runner
当目标机器或者容器安装Gitlab Runner后,就需要将Gitlab Runner注册到Gitlab CI中,这样CI才可以在构建作业时使用目标Runner。
注册的步骤:
从Gitlab CI获取Runner Token
Runner使用Token注册到Gitlab CI
最后更新于
这有帮助吗?