GitLAB
GitLab
目录
[toc]
GitLab简介
DevOps生命周期工具
Git 仓库管理
Wiki文档管理
Issue跟踪
CI/CD
gitlab开源版本:gitlab-ce,国内用得比较多谢。(当然也有企业版本)
国外github用得比较多谢。
这里注意下,git的这个--initial-branch参数需要git高一点的版本,否则会报错。
注意:自己pc上已经有了这个签名配置了,这里就不再重新配置了哦。
创建特性分支
为什么要拉取分支? 一个分支不够吗? 一般我们使用 master
主干分支存放最新的能够发布生产的代码,而单独创建一些特性分支来做项目需求任务的开发分支。 这样的好处是防止主干分支污染,对分支起到了保护的作用。
下面进入 devops-demo-service
项目主页,然后基于主干分支master,创建特性分支feature-dev-01。操作如下:
特性分支开发与提交
查看当前本地分支,发现没有刚刚远程创建的 feature-dev-01
分支。
Win@DESKTOP-VUMV922MINGW64~/Desktop/demo(main)$gitbranch-a*mainremotes/origin/mainWin@DESKTOP-VUMV922MINGW64~/Desktop/demo(main)$
git pull
同步远程仓库所做的更新到本地, 这样远程的feature-dev-01分支就同步到了本地。然后我们使用 git checkout feature-dev-01切换到特性分支。
Win@DESKTOP-VUMV922MINGW64~/Desktop/demo(main)$gitpullFromhttp:*[new branch]feature-dev-01->origin/feature-dev-01Alreadyuptodate.Win@DESKTOP-VUMV922MINGW64~/Desktop/demo(main)$gitbranch-a*mainremotes/origin/feature-dev-01remotes/origin/mainWin@DESKTOP-VUMV922MINGW64~/Desktop/demo(main)$gitcheckoutfeature-dev-01Switchedtoanewbranch'feature-dev-01'branch'feature-dev-01'setuptotrack'origin/feature-dev-01'.Win@DESKTOP-VUMV922MINGW64~/Desktop/demo(feature-dev-01)$
我们更改下README.md文件内容,然后将更改内容提交到远程仓库。
Win@DESKTOP-VUMV922MINGW64~/Desktop/demo(feature-dev-01)$echo情出自愿-事过无悔>README.mdWin@DESKTOP-VUMV922MINGW64~/Desktop/demo(feature-dev-01)$gitadd.warning:intheworkingcopyof'README.md',LFwillbereplacedbyCRLFthenexttimeGittouchesitWin@DESKTOP-VUMV922MINGW64~/Desktop/demo(feature-dev-01)$gitcommit-m"modify README.md"[feature-dev-01 7cf5639] modify README.md1filechanged,1insertion(+),1deletion(-)Win@DESKTOP-VUMV922MINGW64~/Desktop/demo(feature-dev-01)$gitpushoriginfeature-dev-01Enumeratingobjects:5,done.Countingobjects:100%(5/5),done.Deltacompressionusingupto8threadsCompressingobjects:100%(2/2),done.Writingobjects:100%(3/3),294 bytes |294.00KiB/s,done.Total3(delta 1),reused 0 (delta0),pack-reused 0remote:remote:Tocreateamergerequestforfeature-dev-01,visit:remote:http:remote:Tohttp:5617ddd..7cf5639feature-dev-01->feature-dev-01
我们来到gitlab项目页面,刷新下:
这样我们就把本地的特性分支开发的代码提交到了远程特性分支中了, 接下来对应该对该特性分支进行测试验证,没问题后合并到主干分支。
特性分支合并操作
将特性分支 feature-dev-01 代码合并到主干分支main Merge Request。
在这个页面,选择源分支和目标分支。
在这个页面:
- 1 指定合并请求的标题
- 2 描述信息,一般都是变更信息
- 3 指定主管进行审核(最终该用户决定是否合并)
- 4 指定进行代码审查的同事
- 5 合并成功后删除源分支(最后很定要删除源分支,可以先保留一个版本后再删除,此处最好取消勾选)
交合并后,由管理员审查进行合并。
合并后的效果: 特性分支的更改已经同步到了主干分支。
到此一个基本的项目开发提交代码过程就已经完成了。(多熟悉一下这个过程)
==分支策略管理最佳实践==
还是要避免一个情况,防止main分支被污染。
==最佳实践==:特性分支开发,版本分支发布
。
案例:
接着继续以main分支创建2个特性分支:feature-dev-02
,feature-dev-03
以main分支创建1个版本分支:RELEASE-1.1.1
此时,在gitlab web ide里修改特性分支feature-dev-02/03
里的代码并提交。
然后,将2个特性分支代码feature-dev-02/03
提交合并到版本分支RELEASE-1.1.1
里
此时,版本分支经过dev-stag-prod
环境测试无问题后,就打上一个tag,然后合并到主干分支中去。
确认生产发布成功了,这个时候,你打上一个tag。
验证:
3、GitLab用户管理
gitlab重置用户密码
(测试成功)-2022.5.13
1、web界面方式
2、控制台方式
gitlab版本:gitlab/gitlab-ce:14.9.3-ce.0
👉🏼 忘记密码情况下
[root@devops ~]#docker ps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES11a54a1f4a2agitlab/gitlab-ce:14.9.3-ce.0"/assets/wrapper"6daysagoUp44hours(healthy) 0.0.0.0:80->80/tcp,0.0.0.0:443->443/tcp,0.0.0.0:2222->22/tcp devops_tutorial_gitlabf3f039aa667ajenkins/jenkins:2.332.2-centos7-jdk8"/sbin/tini -- /usr/…"4weeksagoUp41hours0.0.0.0:8080->8080/tcp,:::8080->8080/tcp,0.0.0.0:50000->50000/tcp,:::50000->50000/tcpjenkins[root@devops ~]#docker exec -it devops_tutorial_gitlab bashroot@11a54a1f4a2a:/#gitlab-railsconsole-eproduction--------------------------------------------------------------------------------Ruby:ruby2.7.5p203(2021-11-24 revisionf69aeb8314) [x86_64-linux]GitLab:14.9.3(ec11aba56f1) FOSSGitLabShell:13.24.0PostgreSQL:12.7------------------------------------------------------------[bootedin73.71s]Loadingproductionenvironment(Rails 6.1.4.6)irb(main):001:0>irb(main):002:0>User.all=>#<ActiveRecord::Relation [#<User id:1 @root>]>irb(main):003:0>user =User.where(id:1).first=>#<User id:1 @root>irb(main):004:0>user.password='12345678'=>"12345678"irb(main):005:0>user.password_confirmation='12345678'=>"12345678"irb(main):006:0>user.save!=>trueirb(main):007:0>exitroot@11a54a1f4a2a:/## 修改完后,立马生效!
以上亲测有效!
4、GitLab系统管理
1.版本更新
- rpm : rpm -Uvh
- docker:替换新版本镜像
注意跨版本升级需要先升级到当前版本的最后一个版本。
gitlab升级时,高可用,不太好保证,这里用一套蓝环境,一套绿环境,同时只有一套在线;
Gitlab有自己的备份配置,开起来就好了;
2.WebHook触发器
进入GitLab项目设置, 进入 webhook
配置页面;
- 配置要触发的URL,即Jenkins触发器接口URL;
- 选择发生哪种GitLab事件后触发此Webhook;例如:Push提交代码、Tag创建标签等等;
事件:
- Push 提交事件
- Tag Push 创建事件
- MergeRequest 合并事件
- Issue 问题创建更新事件
这里先随便写一个url http:/192.168.1.200:8080/generic-webhook-trigger/invoke?token=devops03-demo-service
,用于测试。
添加webhook后,发现报以下错误:
解决方法:进入admin管理页面设置 >network
找到"Outbound requests"勾选允许请求webhooks和服务。(更改后,重启触发即可)保存配置。
再次添加webhook后,发现就可以正常添加了:
测试模拟触发
模拟事件触发,点击test按钮选择push事件,此时去看下Jenkins是否成功被触发
触发成功则提示: Hook executed successfully:HTTP 200, 此时可以看下Jenkins是否已经触发了一次构建;
Webhook问题排查调试
进入webhook添加页面的最下方,点击你所创建的webhook的 Edit
按钮 ;
webhook历史记录:此记录可以判断,当前动作提交是否产生了webhook。
点击 View details
可以看到此webhook发送给对端Jenkins的数据信息,和请求状态。
- 200: 表示触发Jenkins请求成功;
- Resend Request:重新发送请求;(此处便于排查调试错误)
- RequestBody: GitLab传递给Jenkins的数据信息;
如果Jenkins触发成功了之后,我们可以在Jenkins的构建日志中查看效果。 这些数据就是gitlab post传递过来的。
到此:你基本上已经知道了Gitlab如何触发Jenkins的了。(多看几遍,多练习几遍)
本次自己测试效果:
3. 邮件通知配置
次部分,本次未测试,仅做记录。之前gitlab实验时有用到过次配置。
编辑/etc/gitlab/gitlab.rb文件开启gitlab email。这里以QQ邮箱为例
### GitLab email server settings###!Docs:https:###!**Use smtp instead of sendmail/postfix.**gitlab_rails['smtp_enable']=truegitlab_rails['smtp_address']="smtp.qq.com"gitlab_rails['smtp_port']=465gitlab_rails['smtp_user_name']="2560350642@qq.com"gitlab_rails['smtp_password']="exnyvnekjdgwecga"gitlab_rails['smtp_domain']="smtp.qq.com"gitlab_rails['smtp_authentication']="login"gitlab_rails['smtp_enable_starttls_auto']=truegitlab_rails['smtp_tls']=true### Email Settingsgitlab_rails['gitlab_email_enabled']=truegitlab_rails['gitlab_email_from']='2560350642@qq.com'gitlab_rails['gitlab_email_display_name']='GitLab Admin'
重新配置
gitlab-ctlstop;gitlab-ctlreconfigure;gitlab-ctlstartgitlab-ctlstatus
登录gitlab-rails控制台,发送测试邮件。
su-gitgitlab-railsconsoleirb(main):002:0>Notify.test_email('2560350642@qq.com','test email','gitlab email test').deliver_nowNotify#test_email:processedoutboundmailin0.5msDeliveredmail5eba1b04de4e5_12903fe2ca0c79b0519ec@gitlab-995f97976-2nmb4.mail(1055.9ms)Date:Tue,12May202003:41:56+0000From:GitLabAdmin<2560350642@qq.com>Reply-To:GitLabAdmin<noreply@192.168.1.200>To:2560350642@qq.comMessage-ID:<5eba1b04de4e5_12903fe2ca0c79b0519ec@gitlab-995f97976-2nmb4.mail>Subject:MessageSubjectMime-Version:1.0Content-Type:text/html;charset=UTF-8Content-Transfer-Encoding:7bitAuto-Submitted:auto-generatedX-Auto-Response-Suppress:All<!DOCTYPEhtmlPUBLIC"-
<html><body><p>Message Body And Linuxea.com</p></body></html>=>#<Mail::Message:70243016426420,Multipart:false,Headers:<Date:Tue,12 May 2020 03:41:56 +0000>,<From:GitLab Admin <2560350642@qq.com>>,<Reply-To:GitLab Admin <noreply@192.168.1.200>>,<To:2560350642@qq.com>,<Message-ID:<5eba1b04de4e5_12903fe2ca0c79b0519ec@gitlab-995f97976-2nmb4.mail>>,<Subject:Message Subject>,<Mime-Version:1.0>,<Content-Type:text/html;charset=UTF-8>,<Content-Transfer-Encoding:7bit>,<Auto-Submitted:auto-generated>,<X-Auto-Response-Suppress:All>>
测试邮件:
取消gitlab提交后发送邮件功能
- 问题现象
之前这里配置了自己邮箱,然后每次提交代码运行后,就会发送邮件,这样很烦的。
- 这里取消这里的邮箱后,再次测试代码
- 还是失败了……
- 问题,那么是哪里的配置导致一直发邮件呢??
……
感觉像是这里的问题……
- 改下这里的邮箱试试
在把这里的邮箱改下:
- 再测提交测试
还是有问题,那么我直接再次更新下这里的信息。
再次提交测试:(还是有问题……)
- 那我再次测试
这里删除这个邮箱:
还是不行。。。
- 额,最后发现原因了。。。。是jenkins那里的问题。。。gitlab提交代码会触发jenkins流水线,然后会发送邮件的。因此,这里还原配置,配置下gitlab这个项目的触发webhook就好。
- 再次测试
可以看到,此时就没有再发送邮件了。666
GitLab排错
TS:gitlab推送本地仓库时报错(已解决)
- 报错现象
推送本地仓库时报错……
Win@DESKTOP-VUMV922MINGW64~/Desktop/learndevops(main)$gitpush--set-upstreamoriginmainremote:HTTPBasic:Accessdenied.Theprovidedpasswordortokenisincorrectoryouraccounthas2FAenabledandyoumustuseapersonalaccesstokeninsteadofapassword.Seehttps:fatal:Authenticationfailedfor'https:docker20.10.11win10vmwarokstation虚机(centos7.9)
1、故障现象
注:如果后期 web 界面访问时,总报 502,该如何解决?
可以尝试清除防护期爱那个规则。
另外内存要大于 4G,不然后内存不足,也报 502,502属于内部错误;
[root@Devops ~]# iptables -F # 清空规则[root@Devops ~]# free -mh # 已经使用 4G 以上内存totalusedfreesharedbuff/cacheavailableMem:7.1G4.7G496M117M2.0G2.0GSwap:2.0G520K2.0G
2、解决办法
可以尝试清除防护期爱那个规则。
另外内存要大于 4G,不然后内存不足,也报 502,502属于内部错误;
3、测试过程
🍀 自己后面再用docker安装gitlab时,也报502错误了:
报错前机器内存为2G:
将机器内存改为4G以上:
此时,访问就正常了:
FAQ
自己注册的gitlab账号
- 自己也注册一个公开代码库