GitLab+Jenkins构建CICD环境

本文详细介绍了持续集成的概念和流程,比较了GitLab和GitHub的主要区别,重点讲述了如何在Windows和Linux环境下使用Git操作代码仓库。同时,文章还深入探讨了Jenkins的安装、插件配置、项目创建以及用户权限管理,包括如何通过图形化界面创建分支并合并代码。此外,还涵盖了在GitLab上搭建和管理代码仓库的步骤。
摘要由CSDN通过智能技术生成

目录

持续集成概述及运行流程

GitLab和GitHub的区别

搭建GitLab

 在windows中使用git bash拉取项目并上传到远程仓库

在Linux中拉取并上传代码

搭建Jenkins

安装插件 

jenkins创建项目

Jenkins用户角色权限管理

分支讲解

使用图形化创建分支并将子分支上的代码合并到main分支上


持续集成概述及运行流程
 

持续集成概述

持续集成:持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中可以频繁的将代码部署集成到主干,并进行自动化测试。CI

持续交付:持续交付指的是在持续集成的环境基础上,将代码部署到预生产环境。CD

持续部署:在持续交付的基础上,把代码部署到生产环境的过程自动化。CD

jenkins概述
Jenkins 概述:是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。网方站:https://jenkins.io/

GitLab 概述
gitlab 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。Ruby on Rails 是一个可以使你开发、部署维护 web 应用程序变得简单的框架。

GitLab 拥有与 Github 类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找
官网:https://about.gitlab.com

GitLab和GitHub的区别

相同点:
二者都是基于 web 的 Git 仓库,在很大程度上 GitLab 是仿照 GitHub 来做的,它们都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布和合作开发项目的中心化于存储的场所。
 

不同点:
1、GitHub 如果要使用私有仓库,超过 4 个是需要付费的。GitLab 可以在上面创建私人的免费仓库。

2、GitLab 让开发团队对他们的代码仓库拥有更多的控制,相比于 GitHub,它有不少的特色:允许免费设置仓库权限;允许用户选择分享一个 project 的部分代码:允许用户设置project 的获取权限,进一步的提升安全性;可以设置获取到团队整体的改进进度;通过innersourcing让不在权限范围内的人访问不到该资源。

总结:从代码私有性方面来看,有时公司并不希望员工获取到全部的代码,这个时候 GitLab无疑是更好的选择。但对于开源项目而言,Gitub 依然是代码托管的首选
 

git 相关概念:
git 是一种版本控制系统,是一个命令,是一种工具

gitlab 是用于实现 git 功能的开发库

github 是一个基于git实现的在线代码托管仓库,包含一个网站界面,向互联网开放gitlab 是一个基于 git 实现的在线代码仓库托管软件,一般用于在企业内部网络搭建 git 私服

注:gitlab-ce 社区版,gitlab-ee 是企业版(收费)
 

持续集成系统的工作流程
1、开发者将新版本push到 Gitlab。

2、Gitlab 随后触发jenkins master 结点进行一次 build

3、ienkins master结点将这 buid 任务分配给若干个注册的 lave 结点中的一个,这个 slave结点根据一个事先设置好的脚本进行 build。这个脚本可以做的事情很多,比如编译,测试,生成测试报告等等。这些原本需要手动完成的任务都可以交给jenkins 来做。

4、我们在 build 中要进行编译,这里使用了分布式编译器 distcc 来加快编译速度

搭建GitLab

注意:gitlab主机内存最少4G,不然会报错

安装依赖包

修改主机名
[root@localhost ~]# hostnamectl set-hostname gitlab

[root@gitlab ~]# yum install -y curl policycoreutils-python openssh-server perl
[root@gitlab ~]# systemctl enable sshd
[root@gitlab ~]# systemctl start sshd

安装 Postfix 以发送电子邮件通知
[root@gitlab ~]# yum install postfix 
[root@gitlab ~]# systemctl enable --now postfix

添加防护墙规则

[root@gitlab ~]# firewall-cmd --permanent --add-service=http
[root@gitlab ~]# firewall-cmd --permanent --add-service=https
[root@gitlab ~]# firewall-cmd --reload

安装gitlab

配置gitlab yum源
[root@gitlab ~]# vim /etc/yum.repos.d/gitlab.repo 
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key

安装
[root@gitlab ~]# yum -y install gitlab-ce  ##默认安装最新版本
[root@gitlab ~]# yum install gitlab-ce-x.x.x  # 安装指定版本

配置gitlab访问地址
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb 
external_url 'http://192.168.43.253'   ##配置本机IP地址,也可以修改为自定义的gitlab域名

重置Gitlab
[root@gitlab ~]# gitlab-ctl reconfigure

查看端口
[root@gitlab ~]# netstat -anptu | grep 80

修改密码

查看默认密码
[root@gitlab ~]# cat /etc/gitlab/initial_root_password 

重置密码
[root@gitlab ~]# gitlab-rake "gitlab:password:reset[root]"

登录GitLab

访问本机IP地址

账号默认是:root

更换语言

 

如果访问时遇到一下错误首先看看服务器内存是否是4G或4G以上如果是就需要清空防火墙规则

[root@gitlab ~]# iptables -F 

配置邮件报警

[root@gitlab ~]# vim /etc/gitlab/gitlab.rb 
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "17801797215@163.com"
gitlab_rails['smtp_password'] = "LDTEMESIHWTGNZOE"
gitlab_rails['smtp_domain'] = "smtp.163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
#gitlab_rails['smtp_pool'] = false
gitlab_rails['gitlab_email_from'] = "17801797215@163.com"



重载GitLab
[root@gitlab ~]# gitlab-ctl reconfigure

登录控制台发送测试邮件
[root@gitlab ~]# gitlab-rails console
irb(main):001:0> Notify.test_email('17801797215@163.com','test','test').deliver_now

修改root的邮箱改成自己的邮箱

步骤:点击头像-->编辑个人资料-->往下翻修改电子邮件-->更新个人资料

创建群组

步骤:点击群组-->新建群组-->创建群组

 

 

​​​​​​创建账号并添加到组中

点击管理员-->用户-->输入信息-->创建用户

 

Gitlab用户在组中有五种权限:
Guest、Reporter、Developer、Master、Owner

Guest:可以创建 issue、发表评论,不能读写版本库
Reporter:可以克隆代码,不能提交,QA(测试人员)、PM(主管或者产品经理)可以赋予这个权限
Developer:可以克隆代码、开发、提交、push,RD(研发人员)可以赋予这个权限Master:可以创建项目、添加 tag、保护分支、添加项日成员、编辑项日,核心RD 负责人可以赋予这个权限
(wmer:可以设置项月访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组 leader 可以赋予这个权限

 进入到邮件生成密码

 使用新账号登录

步骤:创建项目-->创建空白页-->填写信息-->新建项目

 

在项目中新建文件

 

 在windows中使用git bash拉取项目并上传到远程仓库

把代码拉取到本地:       
git clone http://192.168.43.253/web-kaifa/test.git
工作区推送到暂存区命令: 
推送所有项目:git add .  推送指定项目:git add index.html
查看暂存区项目:         
git status  
从暂存区撤回到工作区:   
git restore --staged index.html
从暂存区推送到本地仓库:
git commit -m "add index.html"
从本地仓库推到远程仓库:
git branch -M main
git push -uf origin main
 

在Linux中拉取并上传代码

[root@jenkins ~]# yum -y install git

将jenkins服务器负公钥发给gitlab
[root@jenkins ~]# ssh-keygen -t rsa
[root@jenkins .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbB1lKjVBfDTv+AQAdOPzj/WnJckjsNotjrPF+3Oc/Jz7HPEGUISS0qNOWMQfcHD4Iz8KPUctNPyXNWGRIEGrPTT3HU/hUWuNSJ+/k4XTYmdCGnAGlN0pcufkQ4My0AC/SSaiJ3gj1tP1XQm+AskmX3GY/So7u0nt/68Llv2/uFSvPFHMaoRTgt9E3u4sBQJXoDU6+RbTxgu8P2NlvY9oZQjHFdFwNDJYA9CGU+cDx3ULVc0dLDFC9dfz7js7aHy0jGLIE4KrCYQIwW2gyotaLozp6hBpU4yA1NU/yc+a1elSqiBR+k8jKUipsHH7xq036rr6QPUjqcYu/aPjrVnO3 root@jenkins

 命令和在git bash中的一样

搭建Jenkins

[root@jenkins ~]#  wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
[root@jenkins ~]#  rpm --import https://pkg.jenkins.io/redhat/jenkins.io-2023.key

[root@jenkins ~]# yum install fontconfig java-11-openjdk
[root@jenkins ~]# yum install jenkins

[root@jenkins ~]# vim /etc/sysconfig/jenkins 
JENKINS_USER="root"  ##把jenkins修改成root

[root@jenkins ~]# systemctl enable --now jenkins

[root@jenkins ~]# firewall-cmd --add-port=8080/tcp --permanent
[root@jenkins ~]# firewall-cmd --reload

 访问本地服务器IP地址加8080端口

查看这文件夹获得默认密码

[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
9478279f19ce45eda21b8d2e5b7dad98

 选择安装推荐的插件

 

 配置jenkins免密拉取gitlab代码

在jenkins上生成秘钥对

[root@jenkins .ssh]# cat id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA2wdZSo1QXw07/gEAHTj84/1pyXJI7DaLY6zxftznPyc+xzxB
lCEktKjTljEH3Bw+CM/Cj1HLTT8lzVhkSBBqz009x1P4VFrjUifv5OF02JnQhpwB
pTdKXLn5EODMtAAv0kmoid4I9bT9V0JvgLJJl9xmP0qO7tJ7f+vC5b9v7hUrzxRz
GqEU4LfRN7uLAUCV6A1OvkW08YLvD9jZb2PaGUIxxXRcDQyWAPQhlPnA8d1C1XNH
SwxQvXX8+47O2h8tIxiyBOCqwmECMFtoMqLWi6M6eoQaVOMgNTVP8nPmtXpUqogU
fpPIylIqbBx+8atN+q6+kD1I6nGLv2j461ZztwIDAQABAoIBAQDXndBk9+Ba8ihQ
0KNQIT2zI1D0orDu+HMX2LST8tsi7Ht8nvDf5hDAWEKS5AmcwaDAA+bAOAEvNi78
izuNRbwf/yYGB7+7Kw4FXpNmehwQ7rq9CO8FufxWdC2gU+ywdk6dcS2dKxse5uFO
+XPS+bBA8xMk0z0KFeLF902R5ndFo3cayo+Yfpe1z4xPNzGvoE469uB2Xz36P1Gn
ayB8O1+wBnzsTxhobx+VFkUYdaABih+sQVEUL3jAHK3qix9xkHSrQUymHYn7K3j7
Ad9SavAdMZSIfiBABCNkUXcrig+lQ+kfsRhvVNCZEqDU7LxYIt2MRubTQAe6HCs0
J81N3J+BAoGBAPf2FY1OXbjl+dhuEU93jzZjAhVVQJWvhk690Q8CZEBsbq6hG5/y
7cFeU4M9p5RqVa1rtEeDGCPZ+RU2gCnO3Mm2plUMZd0QRCX4sblW1aMI/3Wk/DGN
3RGKzAeDY8FUNNCQ1zQNVni7X8oB/gxCWbgFkjCWQ6T8zU+F7Kd2TPVRAoGBAOIh
JLIC3r7kcd91/VW/TPmj2NlEtLqXZ6rpfn9/F9ZTE74cgXm2EKQU9lGe6K/DP2SQ
vV/5ue/o8TUiFD1ZaeKPSz0uZ3iSPGW5DmHASU9572RrTgFSrhzae/djI2brEwSB
tRkisyGPzIvHWFQIUPnX8+z+aHJyWReC4cAkYjaHAoGASIi45zwMWIEVpAUWlTtx
LkSqIFlu6hqNXE1UcWKOtvXBLt47+X8To6QXI+YONnEgnPlLpDup/RrPLTBjL1eu
6GbAo1JcHd2bQcxNGN1Y4zdHmz9m8owAJhiG9I+vx6b9SCGGgliAehK9w5bvnOBv
5E/k4seiBApbeK7Ben81pfECgYEAo6ZCzUVAeLwRIRxdw+GXTo9iTxLnDKaoEsu6
jYCn+qbTAeHVXgUCFA1LmhQ753+Q8DHDq6KqCtL1RXOtXBzKgXkchWGA5oRGi4Oa
wemL5KWlN3Jk2JZChYUk9AteQoxbjgZkzpULOH2+FWamKOJ/3+CGmnwfkLvqeBZz
VD/AiB8CgYA319e7APSXdunTq1rbMa1HJlAan+d40C5nZcVTqs+Zeg7vEAOSPZJi
V3lc0rkEaIK3tP5euW0OczFnA9fNOb6MTLwzwVD4C+suOhKpRmbQeP/3rJUradSv
CTI7ZoPNWvHGvHZxPThCpWDXv0KWwOoHlpfqSP9ZwjItWvVNkZ9P2g==
-----END RSA PRIVATE KEY-----

 

 

 

 

 

安装插件 

 

Git  和  Git client             ##用于jenkins在gitlab中拉取代码
Generic Webhook Trigger         ##gitlab触发jenkins构建项目
Build Authorization Token Root 
Build Token Trigger
GitLab Authentication           ##gitlab和jenkins认证相关的插件
GitLab                          ##安装后从gitlab获取代码
SSH plugin                      ##执行shell脚步
Publish Over SSH                ##用户通过ssh部署应用

jenkins创建项目

 

jenkins把秘钥发给web服务器设置免登
[root@jenkins ~]# ssh-copy-id root@192.168.43.254

这里的URL写gitlab上的克隆地址 

 

 在jenkins服务器写一个创建自动上传web代码的脚本

[root@jenkins ~]# vim deploy.sh 
#!/bin/bash
scp /var/lib/jenkins/workspace/lzz/* root@192.168.43.254:/var/www/html

修改配置文件不然构建会报错

[root@jenkins ~]# vim /etc/sysconfig/jenkins
JENKINS_USER="root"
JENKINS_GROUP="root"

[root@jenkins ~]# vim /usr/lib/systemd/system/jenkins.service
User=root
Group=root

构建项目

Jenkins用户角色权限管理

Jenkins一般用于团队项目持续集成环境,所以就和设计多用户的情况,我们需要为不同人员设置不同的角色,进行权限管理

安装Role-based Authorization Strategy插件

开启role权限 

 

设置角色 

创建两个用户

 

 

给对应的用户分配角色

开启Role-based Authorization Strategy权限后,系统管理里多了个Manage and Assign Roles

 它有俩个角色需要配置:一个是Global roles 全局角色,另一个是Item roles 项目角色

Global roles:
它默认有一个Global roles全局角色是admin

如下图,我又在全局角色里添加了两个全局角色:builder、reader,分别给他们勾选了对应的操作权限

Item roles:
Item roles里默认是空的,需要你去根据自己的需求添加

我是添加了两个项目角色:test-all和zhangsan

其中Pattern 可以是一个任务的名称,也可以是一个任务名称的匹配正则

 

 

 

 

 创建项目

 

 

 登录到zhangsan用户查看是否只能查看自己的项目

分支讲解

新建分支

列出所有的分支
git branch

新建分支
git branch -M slave

分支切换
git checkout slave

创建本切换分支
git checkout -b slave

删除本地分支
git branch -d slave

删除远程分支
git push origin --delete slave

使用图形化创建分支并将子分支上的代码合并到main分支上

 

 

 

 

 

 回到main主分支可以看到刚刚合并的代码

在main分支上创建文件

 在子分支上也创建文件

 到Jenkins构建项目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笨鸟先飞geigeigei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值