持续集成指南:GitLab 的 CI/CD 工具配置与使用

1前言

写代码这项工作,本质就是将工作自动化,减少手工操作提供效率,因为人的本质都是懒狗,程序员也不能例外,为了各种意义的效率提升(懒),我们需要持续集成工具,将代码测试、编译、发布这些重复性很高的工作,全部变成自动化,减轻工作量,提高效率,解放生产力,为华夏伟大复兴贡献力量

说回正题,持续集成工具主流的就 Jenkins 、Gitlab CI/CD 这些,因为我们刚好在用 Gitlab,所以就不去折腾 Jenkins 了,直接用这个好了~

关于 Gitlab 的安装,可以参考我之前写的文章:GitLab的安装、配置、使用

概念科普

缩略词 CI / CD 具有几个不同的含义。CI/CD 中的"CI"始终指持续集成,它属于开发人员的自动化流程。成功的 CI 意味着应用代码的新更改会定期构建、测试并合并到共享存储库中。该解决方案可以解决在一次开发中有太多应用分支,从而导致相互冲突的问题。

CI/CD 中的"CD"指的是持续交付和/或持续部署,这些相关概念有时会交叉使用。两者都事关管道后续阶段的自动化,但它们有时也会单独使用,用于说明自动化程度。

…… (省略又臭又长的名词解释)

只需记得 CI/CD 其实就是一个流程(通常形象地表述为管道),用于实现应用开发中的高度持续自动化和持续监控。因案例而异,该术语的具体含义取决于 CI/CD 管道的自动化程度。许多企业最开始先添加 CI,然后逐步实现交付和部署的自动化(例如作为云原生应用的一部分)。

2安装Gitlab-Runner

根据Gitlab官网的指引

# Download the binary for your system
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64# Give it permissions to execute
sudo chmod +x /usr/local/bin/gitlab-runner# Create a GitLab CI user
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash# Install and run as service
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

服务器使用的是CentOS7系统,实际配置时遇到无法识别gitlab-runner命令的问题,用echo $PATH打印了一下环境变量发现是没有/usr/local/bin,添加到PATH就可以了

安装的时候会自动创建gitlab-runner用户,Runner会在这个用户下执行各种任务,当然用户名和Home目录都可以自定义,就是上面倒数第二个命令。

3注册Runner

在Gitlab中,依次进入:菜单 - 管理员 - 概览 - Runner - 注册一个实例Runner

就会出来一个token,使用以下命令注册即可

sudo gitlab-runner register --url http://gitlab地址:端口/ --registration-token HjymWn4gEzHaVizpvG

注册过程中会让你输入一些信息,最后需要选择executer,可选项有virtualbox、docker、shell之类的,这里我选的shell,直接执行命令控制项目部署。其他的executer等后面再来研究用法。

注册完辽就可以在Gitlab的管理界面看到这个Runner了

2c59de7119bffa233f296725b7dc8567.png

为了让所有项目都能用这个Runner进行部署,需要修改一下配置,把这个钩打上

caa541311201c3af5ddd909199673a7e.png

4配置

为了让gitlab-runner用户能够使用docker,需要将其加入到docker用户组

usermod -aG docker gitlab-runner

配置docker代理

因为我们的生产服务器不能直接访问外网,所以还得配置一下docker的代理

编辑文件:/home/gitlab-runner/.docker/config.json

{"proxies":{"default":{"httpProxy": "http://proxy_ip:8080","httpsProxy": "http://proxy_ip:8080","noProxy": "localhost,127.0.0.1"}}
}

5gitlab-ci.yml

只要在项目的根目录中加入这个文件,然后推送代码到 Gitlab (一般来说是 master 分支),Gitlab Runner 就会根据 script 来执行构建任务。

平时开发时,如果不想要自动构建,可以 checkout 到其他分支(例如 dev)进行开发,等到功能完成需要发布的时候,再合并到 master 分支即可。

这里我写的是用 docker 部署一个 AspNetCore 应用的例子,实际还有 Python、Go、前端项目等常用例子,我后面再更新相关的文章~

variables:GIT_STRATEGY: none
stages:- deploy
deploy_job:stage: deployonly:- masterscript:- cd /home/gitlab-runner/projects/dotnet/dashboard- rm -rf dashboard-backend- git clone http://127.0.0.1:8080/deali/dashboard-backend.git- cd dashboard-backend- docker-compose up --build -d

6小结

这样就搞定了 Gitlab CI/CD 的基础用法,也就是所谓的“持续集成”,可以说灰常好用了~

当然它的功能很强、很多,本文的例子只是用到了其中一种,更多的用法我还在探索中,有收获的话后续会更新这个系列的文章。

7参考资料

  • Post-installation steps for Linux:https://docs.docker.com/engine/install/linux-postinstall/

  • Docker 代理脱坑指南:https://www.cnblogs.com/michael9/p/12300824.html

  • asp.net core结合Gitlab-CI实现自动化部署:https://www.cnblogs.com/guolianyu/p/9709166.html

  • 用 GitLab 做 CI/CD 是什么感觉,太强了:https://cloud.tencent.com/developer/article/1684099

  • CI/CD 工具选型:Jenkins 还是 GitLab CI/CD:https://www.infoq.cn/article/9hscujuukmbbwjpr0p0g

  • 还在用Jenkins?试试Gitlab的CI/CD功能吧,贼带劲!https://juejin.cn/post/6989411087611330573

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 错误日志 redis' already loaded in Unknown on line 0

环境介绍:LNMP 报错信息:注:这个php_errors.log 是我在php.ini 中定义的错误日志路径 问题原因: 报错信息给出的意思是:redis和memcache 模块已经加载过问题解决: php加载模块有两种方式,一种是…

第一周作业

我的Git账号:AI1452349541 和代码图 这是我在电脑和手机上下的网易有道词典 , C也下了。 ***学习内容总结*** 感觉任务并不是很难,有些任务没完成是 因为还没买电脑不好弄,下周电脑一定到位。 ***遇到的问题…

升级MariaDB为10.1版本

2019独角兽企业重金招聘Python工程师标准>>> CentOS中升级mariadb为10.1GA版本。 1、如果有,停止服务 systemctl stop mariadb 2、卸载原来的数据库服务 yum -y remove mari* 3、删除数据库文件 rm -rf /var/lib/mysql/* 4.创建/etc/yum.repos.d/MariaDB…

第一篇文章

第一次写博客。欢迎各位大牛捧场转载于:https://www.cnblogs.com/clnchanpin/p/6753665.html

羊了个羊的Ignite大会又来啦

据说最近羊了个羊非常火啊~可惜没有时间精力研究。不过,薅微软羊毛的机会我是一定不会错过的,这不,薅羊毛的机会来了,哈哈哈。作为经常薅微软羊毛的老司机,今天收到了微软的邮件,告知有新的羊毛…

清除谷歌浏览器的dns缓存

谷歌地址栏输入: chrome://net-internals/#dns出现下面界面:找到DNS选项,选择clear host cache即可效果:这样,谷歌浏览器上的dns缓存就清理掉了。应用场景: 本地环境和线上环境用的是一个host,这…

什么样的代码称得上是好代码?

“软件自有其美感所在” --《重构》图片:崇礼瀚海梁的山花 拍摄于2022年8月13日 摄影师:刘先生这篇内容写作于4年前(2018年),是自己多年软件开发工作的一点感悟,现在看来虽有偏颇,但总体思想方…

Coding and Paper Letter(十四)

2019独角兽企业重金招聘Python工程师标准>>> 资源整理。 1 Coding: 1.R语言包ungeviz,ggplot2的拓展包,专门用来作不确定性的可视化。 ungeviz 2.计算机图形学相关开源项目。 计算机图形学光线追踪开源项目C源码。 computer graphics ray tra…

eclipse安装反编译插件

一、下载插件 1、官方地址:http://jd.benow.ca/ 2、百度网盘:http://pan.baidu.com/s/1eSJ7Tiq 密码:sr6p 二、打开eclipse,点击“Help > Install New Software” 三、Name填:JD-Eclipse Update Site(可…

PHP 项目中缓存的多种应用实现

一、CDN缓存原理和介绍 1、各地部署多套静态存储服务,本质上是空间成本换时间 2、CDN是域名和真实服务器中间的一个环节,添加cdn节点后,用户访问时,自动选择最近的节点内容,不存在再请求原始服务器 3、CDN本质上是一种…

【tomcat】servlet原理及其生命周期

1.什么是servlet? Servlet(Servlet Applet),全称Java Servlet,是用Java编写的服务器端程序。而这些Servlet都要实现Servlet这个接口。其主要功能在于交互式的浏览和修改数据,生成动态Web内容。Servlet运行于支持Java的…

实现一个监控 IP 的 windows 服务

实现一个监控 IP 的 windows 服务Intro我们公司的 VPN 用自己的电脑连公司的台式机的时候需要用 IP 地址,有一次尝试去连的时候发现连不上,第二天到公司发现 IP 变掉了,不是之前连的 IP 了,于是就想写一个简单 Windows 服务来监控…

微信企业号开发:启用回调模式

微信企业号开发怎样启用回调模式?就是简单的登陆PC版微信,点击应用中心,选择须要应用,再点击回调模式启用?似乎不是这么简单。!能够看到核心的仅仅有三个URL。Token,EncodingAESKey这三个參数能…

MVC中提交表单的4种方式

一,MVC HtmlHelper方法 Html.BeginForm(actionName,controllerName,method,htmlAttributes){} BeginRouteForm 方法 (HtmlHelper, String, Object, FormMethod) 二,传统Form表单Aciton属性提交 三,JqueryAjax 提交表单 四,MVC C…

photoshop制作网站圆形图标ico

1、选择左侧工具栏中的椭圆工具2、鼠标直接在图片上选择区域3、在图片上鼠标右键建立选区,在弹出的对话框直接点确定变成这样:4、点击选择,然后点击反选变成这样5、图层栏,在图片上右键复制图层,弹出对话框直接确定即可…

WPF 窗体设置亚克力效果

WPF 窗体设置亚克力效果控件名:WindowAcrylicBlur作者: WPFDevelopersOrg - 吴锋原文链接: https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40。Visual Studio 2022。项目使用 MIT 开源许可协议。WindowAcrylicB…

数据分块加载——BigPipe 技术【类似facebook】

一、原理 分块加载,加载完一块,就先把页面数据刷给用户,再加载下面的,直到加载完毕二、基础需知:三、服务端和php的相应配置 如果想实现分块加载【bigpipe技术】,还需要对nginx.conf 和 php.ini 进行相应配…

右键一下,哇塞!

面向 Dev 频道的 Windows 预览体验成员微软推送了 Windows 11 预览版Insider Preview Build 25211主要变化1.微软改进了 Windows 11 小组件面板,小组件面板中的添加按钮更加醒目,点击用户头像将打开小组件设置。Windows 11 小组件由 Microsoft Edge 浏览…

前端学习 -- Css -- 内联元素的盒模型

内联元素不能设置width和height;设置水平内边距,内联元素可以设置水平方向的内边距:padding-left,padding-right;垂直方向内边距,内联元素可以设置垂直方向内边距,但是不会影响页面的布局;为元素…

Redis 数据持久化的方案的实现

一、需要了解的基础 1、Redis实现数据持久化的两种实现方式: RDB:指定的时间间隔内保存数据快照 AOF:先把命令追加到操作日志的尾部,保存所有的历史操作二、RDB 实现 Redis数据持久化(默认方式)1、编辑 red…