谈谈这几天的感受吧:公司因为以前的gitlab服务器出了一点问题,让半路出家的我来看一下,最后说模拟搭建一个gitlab服务器,先看一下里面是跑些什么东东,需要配置的内容是什么等,接着就着手干,但是百度了多篇文章,B站也看了不少的视频,几乎内容都差不多,但是几乎都有一个问题:光是说了做什么,可能本身作者就是熟悉gitlab的大牛,自然就忽略了中间的很多细节,可能有时候轻描淡写地说执行啥命令一下,但是对于小白而言,一下子都可能懵逼,连下手的地方都找不到,因此,结合自己的历程,连文带图,把全过程写下来,同时将自己经历的坑也填上,希望能为后面学习的人提供点帮助。
基本要求:
首先:安装gitlab的服务器,不论本地的PC机、虚拟机、云服务器都可以安装,但是必须要注意的一点:必须CPU2个,内存2G以上,这个算是最低标准了吧,因为我曾经从天翼云领取了1CPU,1G内存的免费服务器,可惜在安装的时候,系统都在安装的时候就挂掉,CPU占用接近100%,内存溢出等错误不断,耗时让人抓狂!最终还报错安装不成功!
其次:我使用的操作系统是Linux,CentOS7【使用XSHELL7链接服务器进行操作】

图一:安装好gitlab后,使用xshell登陆Linux服务器示例
主要的包有: policycoreutils 、openssh-server、 openssh-clients、 postfix、policycoreutils-python。【暂时不要纠结它们做啥用,反正安装就行,有兴趣后期慢慢研究。】
1、命令行内录入安装命令,回车自动执行:
sudo yum -y install policycoreutils openssh-server openssh-clients postfix policycoreutils-python
2、启动服务:逐个将命令录入命令行执行即可【sudo是获取管理员权限,如果本身即是管理员root登陆的,不需要都可以顺利执行,否则就加上以提升权限】。
sudo systemctl enable sshd
sudo systemctl start sshd
systemctl enable postfix
systemctl start postfix
3、关闭防火墙,或者在防火墙将HTTP、HTTPs添加白名单【最好是关闭防火墙】
关闭命令:systemctl stop firewalld
添加白名单的命令【添加完成后重启防火墙】:
添加http: sudo firewall-cmd --permanent --add-service=http
添加https:sudo firewall-cmd --permanent --add-service=https
重启防火墙:sudo systemctl reload firewalld
【注:以上3步因比较简单,粘贴复制命令即可,故不上图了。】
这些都是系统首先必须安装gitlab的依赖包,熟悉的人可以在命令行内使用先查询是否已经安装,例如,查询mysql是否已安装。在命令行中使用命令:rpm -qa|grep -i mysql。如果已经安装可以略去,不熟悉的话,直接全部安装,如果已经安装自然会跳过的。

图二、查询软件或服务是否已安装
1、下载安装包:
1.1、直接在线连接命令方式:【最好在系统etc目录下创建gitlab文件夹放置,创建文件夹方式:cd /etc,转入etc目录,使用命令 mkdir gitlab 创建文件夹,在cd gitlab进入】
下载命令:命令中的“-c",为断点继续的意思,因为网络的原因,可能一次会下载不全不能安装,发现断掉后,再次执行就必须由-c即接着上次下载的继续,否则就是从头开始,会耽误很多时间。
wget --no-check-certificate -c https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-14.6.4-ce.0.el7.x86_64.rpm
【说明:这里使用国内清华的镜像站点下载的14.6.4版本,可以从自己进入清华镜像网站,找自己喜欢的版本,从镜像复制网址并替换相关信息即可】

图三、从清华镜像获取地址或下载镜像
1.2、先下载到本地,再使用FTP等方式传到Linux服务器:【当前我采用的方式。因为服务器直接下载的,网络问题等,需要很多次,比较耗费时间】
这里我使用的是与XSHELL配套的Xftp,在xhell的官网也有xftp,没有安装的话下载安装。
上传方法:

图四、使用FTP工具向服务器上传或下载文件
2、 安装gitlab:
【注:如果机器配置不够,可能就会安装不成功,死机等状况,这个坑上,我至少在天翼云、阿里云以及虚拟机上,安装3次都因资源问题,安装失败。后增加虚拟机资源,一次通过】
首先在服务器上,使用cd命令转到安装包放置的文件夹,例如我的是 /etc/gitlab:cd /etc/gitlab
在该文件夹下执行命令可以使用以下两种方式中的任意一种:
(1)yum install -y gitlab-ce-14.8.4-ce.0.el7.x86_64.rpm
(2)rpm -i gitlab-ce-14.8.4-ce.0.el7.x86_64.rpm
如果报yum出错之类的,则需要安装,因含有下载等内容超出本文范围,自行搜索。安装即可

图五、安装成功后的页面
3、成功后,修改gitlab的默认端口信息
进入配置文件:在安装目录 /etc/gitlab下的 gitlab.rb
进入目录:cd /etc/gitlab
进行编辑:vim gitlab.rb
【注:vim编辑中:有3中模式:注意常用的切换方式:
按i键进入插入模式,可以修改文件,按ESC退回到命令模yum式
从yum模式保存退出方式(英文状态的冒号+w+q) :wq ; 不保存只退出: :q】
需要修改的内容:
external_url 和 nginx['listen_port']的key对应的内容,
external_url ‘http://192.168.10.3:8080’ # 修改为自己服务器的地址和端口
nginx['listen_port'] = 8080 #自己准备使用的端口号
----测试中资源配置低,则配置以下---
monitoring['grafana']['enable'] = false
【注:gitlab.rb文件内容较多,可以在使用vim gitlab.rb后,在 yum模式下,按(斜杠 + 待搜索内容) /external_url 找到后,再按i,进入编辑模式后去修改】
【注:gitlab-ctl reconfigure 首次执行会耗费很长时间,后期修改后执行可能需要1-2分钟,可以安心做其他事情,至少10分钟以上;如果机器配置不够,可能就会出现死机等状况,虽然上一步的安装成功,但是最终未能使用起来】
执行重新配置指令:gitlab-ctl reconfigure
执行重启服务指令:gitlab-ctl restart
【注:gitlab-ctl reconfigure 速度慢,CPU可能爆满,如果受不了,可以使用以下方法退出:
ctrl + c 强制停止服务】
在浏览器中输入第二步第3节中配置的 external_url 地址: http://192.168.10.3:8080
这里需要注意的是:首次打开时,可能还是会出现连接超时之类的错误,多刷几次。如果多刷几次还是不行,请注意服务器上的防火墙是否已经关闭,本人在这里掉坑花费了很长时间,老是出不来,服务器上执行systemctl stop firewalld后,浏览器上立马出现登陆页面!!
首次登陆页面的账号是root,密码则是临时密码,保存在安装目录下的文件”initial_root_password“中,初始密码保存24小时,自动删除,首次登陆后需要修改密码操作。
对于本次我的即为:/etc/gitlab/initial_root_password中,
cd /etc/gitlab/ 进入目录, cat /etc/gitlab/initial_root_password, 即可查看到。

图六、获取首次登陆的初始密码

图七、首次登陆页面

登陆后的页面
好了,本次gitlab的安装顺利完成了,关于使用,待我也熟悉一些后再来一些基础的最容易上手的吧。
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我想使用spawn(针对多个并发子进程)在Ruby中执行一个外部进程,并将标准输出或标准错误收集到一个字符串中,其方式类似于使用Python的子进程Popen.communicate()可以完成的操作。我尝试将:out/:err重定向到一个新的StringIO对象,但这会生成一个ArgumentError,并且临时重新定义$stdxxx会混淆子进程的输出。 最佳答案 如果你不喜欢popen,这是我的方法:r,w=IO.pipepid=Process.spawn(command,:out=>w,:err=>[:child,:out])
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
我正在尝试找到一种方法来规范化字符串以将其作为文件名传递。到目前为止我有这个:my_string.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.gsub(/[^a-z]/,'_')但第一个问题:-字符。我猜这个方法还有更多问题。我不控制名称,名称字符串可以有重音符、空格和特殊字符。我想删除所有这些,用相应的字母('é'=>'e')替换重音符号,并将其余的替换为'_'字符。名字是这样的:“Prélèvements-常规”“健康证”...我希望它们像一个没有空格/特殊字符的文件名:“prelevements_routin
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手
我认为我的问题最好用一个例子来描述。假设我有一个名为“Thing”的简单模型,它有一些简单数据类型的属性。像...Thing-foo:string-goo:string-bar:int这并不难。数据库表将包含具有这三个属性的三列,我可以使用@thing.foo或@thing.bar之类的东西访问它们。但我要解决的问题是当“foo”或“goo”不再包含在简单数据类型中时会发生什么?假设foo和goo代表相同类型的对象。也就是说,它们都是“Whazit”的实例,只是数据不同。所以现在事情可能看起来像这样......Thing-bar:int但是现在有一个新的模型叫做“Whazit”,看起来
我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion
我经常迷上ruby的一件事是递归模式。例如,假设我有一个数组,它可能包含无限深度的数组作为元素。所以,例如:my_array=[1,[2,3,[4,5,[6,7]]]]我想创建一个方法,可以将数组展平为[1,2,3,4,5,6,7]。我知道.flatten可以完成这项工作,但这个问题是作为我经常遇到的递归问题的一个例子-因此我试图找到一个更可重用的解决方案。简而言之-我猜这种事情有一个标准模式,但我想不出任何特别优雅的东西。任何想法表示赞赏 最佳答案 递归是一种方法,它不依赖于语言。您在编写算法时要考虑两种情况:再次调用函数的情
我正在使用ruby标准记录器,我想要每天轮换一次,所以在我的代码中我有:Logger.new("#{$ROOT_PATH}/log/errors.log",'daily')它运行完美,但它创建了两个文件errors.log.20130217和errors.log.20130217.1。如何强制它每天只创建一个文件? 最佳答案 您的代码对于长时间运行的应用程序是正确的。发生的事情是您在给定的一天多次运行代码。第一次运行时,Ruby会创建一个日志文件“errors.log”。当日期改变时,Ruby将文件重命名为“errors.log
我们在Ubuntu14.04和Gitlab9.3.7上运行,运行良好。我们正在尝试更新到Gitlabv9.3.8的最新安全补丁,但它给我们这个错误:Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension.currentdirectory:/home/git/gitlab/vendor/bundle/ruby/2.3.0/gems/re2-1.0.0/ext/re2/usr/local/bin/ruby-r./siteconf20170720-19622-15i0edf.rbextconf.rbcheckingformain(