企业级 CI/CD 持续集成/交付/发布

一:git,github,gitlab的区别

Git是版本控制系统;Github是在线的基于Git的代码托管服务,GitHub同时提供付费账户和免费账户;Gitlab 创建免费的私人repo。

二,git介绍

Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是基于Linux 内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

1,git与svn区别:

GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

2,git的工作流程

1,克隆 Git 资源作为工作目录。2,在克隆的资源上添加或修改文件。 3,如果其他人修改了,你可以更新资源。4,在提交前查看修改。5,提交修改。6,在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

 git的工作区、暂存区和版本库工作区:就是你在电脑里能看到的目录。暂存区:英文叫stage, 或index。一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),标记为 "master" 的是 master 分支所代表的目录树。图中 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。 图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。 当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。当执行 "git rm --cached <file>" 命令时,会直接从暂存区删除文件,工作区则不做出改变。 当执行 "git checkout ." 或者 "git checkout -- <file>" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。 当执行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

三,git安装使用

1,yum安装

[root@192 ~]#yum -y install git       (yum会自动解决安装包之间的依赖关系)或者yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel git-core[root@192 ~]#git --version    #查看版本号git version 1.8.3.1

2,windows平台安装

在 Windows 平台上安装 Git 同样轻松,有个叫做 msysGit 的项目提供了安装包,可以到 GitHub 的页面上下载 exe 安装文件并运行:

安装包下载地址:https://gitforwindows.org

完成安装之后,就可以使用命令行的 git 工具(已经自带了 ssh 客户端)了,另外还有一个图形界面的 Git 项目管理工具。

在开始菜单里找到"Git"->“Git Bash”,会弹出 Git 命令窗口,你可以在该窗口进行 Git 操作。

四,git使用

1,Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。2,这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:3,/etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。4,~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。5,当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。6,在 Windows 系统上,Git 会找寻用户主目录下的 .gitconfig 文件。主目录即 $HOME 变量指定的目录,一般都是 C:\Documents and Settings$USER。此外,Git 还会尝试找寻 /etc/gitconfig 文件,只不过看当初 Git 装在什么目录,就以此作为根目录来定位。

1,git用户信息

[root@192 ~]#git  config  --global  user.name  "shuai"[root@192 ~]#git  config  --global  user.email  "chen13665026727@163.com"[root@192 ~]# git config --list
user.name=shuai
user.email=chen13665026727@163.com[root@192 ~]#cat  ~/.gitconfig
[user]name = shuaiemail = chen13665026727@163.com

2,git使用

[root@192 ~]#ssh-keygen   #一直回车[root@192 ~]#cat  .ssh/id_rsa.pub     #查看公钥内容ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCraymQIsIhoAdCqunTkyOKTEgLu4pVHE6bEWQX5iboWyJdWB27TMMbF3Ujd9JTcMS7eDg68LDL08wx9ruqzUoyTCifJTjzLscaKU8vVLspuwE+Eu/ezUqKeGC+D/JvHShouyFjf/ZGonjy49vsxrz61Pnw6dOro1CPyMeRaKnLHnhXzxaUTtc/nTen9ui2bICQyjTNs+G3N29+P+GDVJ/1+zx/VSopBd93/o6pC+wtfh8zNAjaPCbS8EV9Qdu3fmQARFdx7rj1wXV9AYc8B0FS5RBrvu7nzamIA69KgmpTH3wO+mTFuGIq/w7fy8ZU8J5AJV/34eBG/pqI0t8iYVVJ root@192.168.222.128

示例如下:

1,将公钥内容复制一下到github里面个人中心–设置–SSH和GPG密钥

2,创建一个自定义仓库

3,复制远程仓库ssh密钥


下载远程github的仓库到本地服务器

[root@192 ~]# git clone git@github.com:chenshuai1314/school.git
正克隆到 'school'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
接收对象中: 100% (3/3), done.[root@192 ~]# ls
anaconda-ks.cfg  school

3,本地项目与远程项目之间的交互

[root@192 ~]# mkdir haha     #创建一个本地的代码库目录
[root@192 ~]# cd haha/       #切换到目录下
[root@192 haha]# git init    #初始化
初始化空的 Git 版本库于 /root/haha/.git/
[root@192 haha]# git remote add origin git@github.com:chenshuai1314/school.git   #添加远程项目地址(可从项目主页ssh地址复制)[root@192 haha]# echo 1 > 1.txt   #创建文档
[root@192 haha]# echo 2 > 2.txt
[root@192 haha]# ls
1.txt  2.txt
[root@192 haha]# git add 1.txt   #添加文件1到git的暂存区
[root@192 haha]# git add 2.txt或者git  add  .    #添加所有的文件到git暂存区[root@192 haha]# git commit -m 'banben1'   #提交到本地的版本库(版本库自定义)
[master(根提交) 8a2e40f] banben12 files changed, 2 insertions(+)create mode 100644 1.txtcreate mode 100644 2.txt
[root@192 haha]# git push -u origin master   #将本地的修改的代码库提交到远程服务器
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 240 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'master' on GitHub by visiting:
remote:      https://github.com/chenshuai1314/school/pull/new/master
remote:
To git@github.com:chenshuai1314/school.git​      [new branch]      master -> master
​      分支 master 设置为跟踪来自 origin 的远程分支 master。

4,常用的git命令

[root@192 ~]# git --help最常用的 git 命令有:add        添加文件内容至索引bisect     通过二分查找定位引入 bug 的变更branch     列出、创建或删除分支checkout   检出一个分支或路径到工作区clone      克隆一个版本库到一个新目录commit     记录变更到版本库diff       显示提交之间、提交和工作区之间等的差异fetch      从另外一个版本库下载对象和引用grep       输出和模式匹配的行init       创建一个空的 Git 版本库或重新初始化一个已存在的版本库log        显示提交日志merge      合并两个或更多开发历史mv         移动或重命名一个文件、目录或符号链接pull       获取并合并另外的版本库或一个本地分支push       更新远程引用和相关的对象rebase     本地提交转移至更新后的上游分支中reset      重置当前HEAD到指定状态rm         从工作区和索引中删除文件show       显示各种类型的对象status     显示工作区状态tag        创建、列出、删除或校验一个GPG签名的 tag 对象[root@192 ~]# git init   #初始化[root@192 ~]# git  add  1.txt  #将该文件添加到暂存区[root@192 ~]# git add .    #将所有文件添加到暂存区[root@192 ~]# git  commit  -m 'banben'  #将暂存区的文件保存成为某一版本,版本自定义[root@192 ~]# git log  #查看所有的版本日志[root@192 ~]# git  status  #查看现在暂存区的状况[root@192 ~]# git  diff  #查看现在文件与上一个提交commit版本的区别[root@192 ~]# git  reset --hard  HEAD^   #回到上一版本[root@192 ~]# git  reset  --hard  xxxx  #xxxx为版本编号,回到这个编号的版本[root@192 ~]# git  pull  origin  master   #从主分支pull到本地[root@192 ~]# git push  -u origin  master  #从本地代码库push上传到远程库主分支

五,git版本穿梭

1,版本回退

[root@192 haha]# git log    #查看所有版本
commit 45bf79eb308ac3f418a42f03ba2b9b169ff678ef
Author: shuai <chen13665026727@163.com>
Date:   Wed May 11 21:40:15 2022 +0800notecommit 8a2e40f1aad7ed056378e39157f3e40385353c1a
Author: shuai <chen13665026727@163.com>
Date:   Wed May 11 21:27:16 2022 +0800banben1[root@192 haha]# git reflog   #查看命令历史版本
45bf79e HEAD@{0}: commit: note
8a2e40f HEAD@{1}: commit (initial): banben1[root@192 haha]#  git reset --hard HEAD^   #退回到上一个版本HEAD 现在位于 8a2e40f banben1[root@192 haha]#  git reset --hard  8a2e40f   #退回到指定编号版本[root@192 haha]# git log      #查看现存版本
commit 8a2e40f1aad7ed056378e39157f3e40385353c1a
Author: shuai <chen13665026727@163.com>
Date:   Wed May 11 21:27:16 2022 +0800banben12,分支管理[root@192 haha]# git checkout  -b  dev    #创建dev分支,并切换到dev分支下
切换到一个新分支 'dev'
[root@192 haha]# git branch   #查看当前分支,以及所在分支* devmaster[root@192 haha]# git branch tong    #常见新的分支tong
[root@192 haha]# git branch      #查看所有分支* devmastertong[root@192 haha]# git checkout tong   #切换到分支tong切换到分支 'tong'3,分支合并[root@192 haha]# git branchdev* mastertong[root@192 ~]# git merge dev   #把dev分支的工作成果合并到master分支上[root@192 ~]# git  branch  -d  dev   #删除dev分支[root@192 haha]# git  branch      #分支dev已经没有了

六,安装本地git服务器

[root@192 ~]# useradd  git[root@192 ~]# passwd git[root@192 ~]# mkdir  /git-root[root@192 ~]# cd  /git-root[root@192 git-root]# git init --bare shell.git
初始化空的 Git 版本库于 /git-root/shell.git/
[root@192 git-root]# chown -R git.git  shell.git/
[root@192 git-root]# ssh-copy-id git@192.168.222.132....Now try logging into the machine, with:   "ssh 'git@192.168.222.132'"
and check to make sure that only the key(s) you wanted were added.[root@192 git-root]# cd /opt/[root@192 opt]# git clone git@192.168.222.132:/git-root/shell.git/
正克隆到 'shell'...
warning: 您似乎克隆了一个空版本库。
[root@192 opt]# ls
shell[root@192 opt]# cd shell/
[root@192 shell]# ls -a
.  ..  .git[root@192 shell]# touch long
[root@192 shell]# git add long
[root@192 shell]# git commit -m 'banben1'
[master(根提交) 72f9a90] banben11 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 long
[root@192 shell]# git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 201 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.222.132:/git-root/shell.git/* [new branch]      master -> master
[root@192 shell]# lslong
[root@192 shell]# git branch* master
注意:git init 和 git init –bare 的区别:使用--bare选项时,不再生成.git目录,而是只生成.git目录下面的版本历史记录文件,这些版本历史记录文件也不再存放在.git目录下面,而是直接存放在版本库的根目录下面.用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作。但别的用户在将更新push上来的时候容易出现冲突。使用”git init –bare”方法创建一个所谓的裸仓库,之所以叫裸仓库是因为这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作,如果你硬要操作的话,只会得到下面的错误(”This operation must be run in a work tree”)这个就是最好把远端仓库初始化成bare仓库的原因github远程代码仓库与本地连接的大致流程:
github注册账户--github创建仓库--本地服务器生成ssh公钥--github添加ssh公钥

七,gitlab server 部署

1,修改主机名

[root@192 ~]# hostnamectl set-hostname gitlab

2,关闭防火墙和selinux

3,本地主机解析(可做可不做)

[root@gitlab ~]# cat /etc/hosts127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4::1     localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.222.132  www.haha.comC:\Windows\System32\drivers\etc  (windows做域名解析)打开hosts尾部添加:192.168.222.132  www.haha.com

4,开启邮件服务

[root@gitlab ~]#systemctl start postfix[root@gitlab ~]#systemctl enable postfix

5,安装gitlab依赖包

[root@gitlab ~]#yum install -y curl openssh-server openssh-clients postfix cronie policycoreutils-python

7,添加gitlab安装源(根据需求选择一种即可)

阿里源[root@gitlab ~]# vim /etc/yum.repos.d/gitlab.repo[gitlab-ce]name=gitlab-cebaseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7Repo_gpgcheck=0Enabled=1gpgcheck=0清华源:[root@gitlab ~]# vim /etc/yum.repos.d/gitlab.repo[gitlab-ce]name=Gitlab CE Repositorybaseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/gpgcheck=0enabled=18,安装gitlab(选择ce)[root@gitlab ~]#yum -y install  gitlab-ce   #会安装最新版本,软件较大接近1G[root@gitlab ~]#head -1 /opt/gitlab/version-manifest.txtgitlab-ce 13.6.19,gitlab配置登录链接[root@gitlab ~]#vim /etc/gitlab/gitlab.rb...external_url 'http://192.168.222.132'   #可以填ip地址或者域名[root@gitlab ~]#grep "^external_url" /etc/gitlab/gitlab.rbexternal_url 'http://192.168.222.132' 10,gitlab初始化(第一次配置时间较长)[root@gitlab ~]# gitlab-ctl  reconfigure11,启动gitlab服务(涉及的服务组件比较多)[root@gitlab ~]#gitlab-ctl start12,登录gitlab浏览器输入http://192.168.222.132,就进入登陆界面,默认登录用户是rootpassword密码操作设置:[root@gitlab ~]#gitlab-rails console -e production出现交互界面后执行:u=User.where(id:1).first     (u定义为root用户)设置root密码, 注意需要符合密码强度:u.password='Qianfeng@123' 密码确认输入:u.password_confirmation='Qianfeng@123'保存:u.save!退出交互界面:quit

注意:修改默认端口
l如果需要手工修改nginx的port ,可以在gitlab.rb中设置 nginx['listen_port'] = 8000 ,
然后再次 gitlab-ctl reconfigure即可

gitlab设置https安全登录部署

1,创建私有密钥[root@gitlab ~]#mkdir  -p  /etc/gitlab/ssl    #递归创建目录[root@gitlab ~]#openssl genrsa  -out "/etc/gitlab/ssl/www.haha.com.key"  2048  #创建私钥Generating RSA private key, 2048 bit long modulus...............+++...............................................................................+++e is 65537 (0x10001)2,创建私有证书[root@gitlab ~]#openssl req -new -key "/etc/gitlab/ssl/www.haha.com.key"  -out "/etc/gitlab/ssl/www.haha.com.csr"......进入交互界面Country Name (2 letter code) [XX]:cn      #cn中国State or Province Name (full name) []:sh    #名字自定义Locality Name (eg, city) [Default City]:sh     #城市自定义Organization Name (eg, company) [Default Company Ltd]: #直接回车Organizational Unit Name (eg, section) []: #直接回车Common Name (eg, your name or your server's hostname) []:gitlab.example.comEmail Address []:www.haha.comPlease enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:123456    #密码自定义An optional company name []: #直接回车完成了!!![root@gitlab ~]#ll   /etc/gitlab/ssl-rw-r--r-- 1 root root 1066 Jan 2 15:32 gitlab.example.com.csr-rw-r--r-- 1 root root 1679 Jan 2 15:30 gitlab.example.com.key3,建CRT签署证书利用私有密钥和私有证书创建CRT签署证书[root@gitlab ~]#openssl x509 -req -days 365 -in "/etc/gitlab/ssl/www.haha.com.csr" -signkey "/etc/gitlab/ssl/www.haha.com.key" -out "/etc/gitlab/ssl/www.haha.com.crt"...Signature oksubject=/C=cn/ST=sh/L=sh/O= /OU= /CN=gitlab.example.com/emailAddress=admin@example.comGetting Private key[root@gitlab ~]#ll  /etc/gitlab/ssl/total 12-rw-r--r-- 1 root root 1265 Jan 2 15:39 gitlab.example.com.crt-rw-r--r-- 1 root root 1066 Jan 2 15:32 gitlab.example.com.csr-rw-r--r-- 1 root root 1679 Jan 2 15:30 gitlab.example.com.key4,创建pem证书利用openssl命令输出pem证书[root@gitlab ~]#openssl dhparam -out /etc/gitlab/ssl/dhparam.pem 2048   #不用改直接复制...pem证书生成需要点时间....5,查看生成的证书[root@gitlab ~]# ll /etc/gitlab/ssl/total 16-rw-r--r-- 1 root root 424 Jan 2 15:46 dhparam.pem-rw-r--r-- 1 root root 1265 Jan 2 15:39 gitlab.example.com.crt-rw-r--r-- 1 root root 1066 Jan 2 15:32 gitlab.example.com.csr-rw-r--r-- 1 root root 1679 Jan 2 15:30 gitlab.example.com.key6,更改文件权限[root@gitlab ~]#chmod 600 /etc/gitlab/ssl/*[root@gitlab ~]#l /etc/gitlab/ssl/total 16-rw------- 1 root root 424 Jan 2 15:46 dhparam.pem-rw------- 1 root root 1265 Jan 2 15:39 gitlab.example.com.crt-rw------- 1 root root 1066 Jan 2 15:32 gitlab.example.com.csr-rw------- 1 root root 1679 Jan  2 15:30 gitlab.example.com.key7,配置gitlab[root@gitlab ~]#cp /etc/gitlab/gitlab.rb{,.bak} 或者cp /etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb.bak[root@gitlab ~]#vim /etc/gitlab/gitlab.rb\## 更改如下32行  external_url 'https://www.haha.com'      #变成https://域名1398行 nginx['redirect_http_to_https'] = true   #改成true1410行 nginx['ssl_certificate'] = "/etc/gitlab/ssl/www.haha.com.crt"   #改www.haha.com1411行 nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/www.haha.com.key"  #改www.haha.com8,初始化gitlab相关服务器配置[root@gitlab ~]#gitlab-ctl reconfigureStarting Chef Client, version 13.6.4resolving cookbooks for run list: ["gitlab"]Synchronizing Cookbooks:\- gitlab (0.0.1)\- package (0.1.0)\- postgresql (0.1.0)...gitlab Reconfigured!出现这个表示配置没有问题!9,nginx配置(可选项,配置失败的解决方案)[root@gitlab ~]#cp /var/opt/gitlab/nginx/conf/gitlab-http.conf{,.bak}[root@gitlab ~]#vim /var/opt/gitlab/nginx/conf/gitlab-http.conf[如果可以正常访问,这里可以不做配置]37  server_name www.haha.com; 38  rewrite ^(.*)$ https://$host$1 permanent;10,启动gitlab[root@gitlab ~]#gitlab-ctl restart11,打开游览器登录gitlabhttp://www.haha.com    (用户名root,密码:Qianfeng@123)

gitlab添加SMTP邮件功能

[root@gitlab ~]#vim  /etc/gitlab/gitlab.rbgitlab_rails['smtp_enable'] = true          #改成truegitlab_rails['smtp_address'] = "smtp.163.com"   #改成smtp.163.comgitlab_rails['smtp_port'] = 465      #465gitlab_rails['smtp_user_name'] = "chen13665026727@163.com"   #添加自己的邮箱地址gitlab_rails['smtp_password'] = "FULLECVMSVNBSDJH"    #这是邮箱授权码gitlab_rails['smtp_domain'] = "163.com"   gitlab_rails['smtp_authentication'] = "login"gitlab_rails['smtp_enable_starttls_auto'] = truegitlab_rails['smtp_tls'] = truegitlab_rails['gitlab_email_enabled'] = truegitlab_rails['gitlab_email_from'] = 'chen13665026727@163.com'gitlab_rails['gitlab_email_display_name'] = 'Example'gitlab_rails['gitlab_email_reply_to'] = '1984478922@qq.com'gitlab_rails['gitlab_email_subject_suffix'] = 'gitlab'修改完配置文件后保存退出2,停止gitlab服务[root@gitlab ~]#gitlab-ctl  stop3,修改配置后需要初始化配置[root@gitlab ~]#gitlab-ctl   reconfigure4,启动服务[root@gitlab ~]#gitlab-ctl start5,gitlab发送邮件测试[root@gitlab ~]#gitlab-rails  consoleLoading production environment (Rails 4.2.10)irb(main):001:0> Notify.test_email('1984478922@qq.com', 'Message Subject', 'Message Body').deliver_now...qq邮箱会收到新的测试邮件

gitlab创建项目组group

gitlab去掉用户的自动注册功能(安全考虑)

八:gitlab开发代码提交处理流程

1,公司代码提交合并流程简述

1,PM(项目主管/项目经理)在gitlab创建任务,分配给开发人员2,开发人员领取任务后,在本地使用git clone拉取代码库3,开发人员创建开发分支(git checkout -b dev),并进行开发4,开发人员完成之后,提交到本地仓库(git commit )5,开发人员在gitlab界面上申请分支合并请求(Merge request)5,PM在gitlab上查看提交和代码修改情况,确认无误后,确认将开发人员的分支合并到主分支(master)6,开发人员在gitlab上Mark done确认开发完成,并关闭issue。这一步在提交合并请求时可以通过描述中填写"close #1"等字样,可以直接关闭issue

2,创建项目管理用户chenshuai

注意:用户添加完毕后,gitlab 会给用户发一封修改密码的邮件,各用户需要登录自己的邮箱,并点击相关的链接,设置新密码。

3,将chenshuai用户添加到建好的组中

4,使用chenshuai用户的身份和密码登录到gitlab界面中,并创建项目project

5,添加服务器ssh公钥

[root@gitlab ~]#useradd  chenshuai[root@gitlab ~]#su - chen[chenshuai@gitlab ~]$ssh-keygen   #一直回车会生成密钥[chenshuai@gitlab ~]$cat .ssh/id_rsa.pub    #查看公钥并复制到gitlab中ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClOoe0GWUuOKztn3fDlL5l/H+2qaRzLuvY7+cw9b4PzeGDQACeb7P6B2aJz3NA2unB94t3TnY36SqpwKTxtjkDKe8nbvsTDYy62p3KJKf/A+plaoVH7TR+th065OFTnedk5YXekuiKMd3u2FNk8OkYEyk3QLHzqQoDXg4yEXJWtPdaDEfJuPBoUfY4mj5k43Qjbu5LtUWF/gM4K4B7HTkDuS8Mjxo+XBi7Bw+G9OZpZBYADwwLs/VlCRomSnFsXq1H+PalziqmsRRgusUNZ9r3cPEKbhm6jileCzn3BsdspUKm+IJEFWdgF7xuBfpTurgYwMhApnEwbOEXJ9gweehv chenshuai@gitlab

6,为chenshuai用户配置git

[chenshuai@gitlab ~]$git config --global user.name "tom"[chenshuai@gitlab ~]$git config --global user.email  "chen13665026727@163.com"[chenshuai@gitlab ~]$git  clone  git@www.haha.com:zu1/zhoulong1.git[chenshuai@gitlab ~]$ cd zhoulong1/
[chenshuai@gitlab zhoulong1]$ ls
ceshi  README.md

7,创建新文件和内容,并提交到dev分支到远程gitlab中zhoulong1里面

[chenshuai@gitlab zhoulong1]$ echo 222 > ceshi[chenshuai@gitlab zhoulong1]$ git checkout -b dev
切换到一个新分支 'dev'
[chenshuai@gitlab zhoulong1]$ git branch* devhahamain[chenshuai@gitlab zhoulong1]$ git add ceshi
[chenshuai@gitlab zhoulong1]$ git commit -m 'banben'
[haha ae25b81] banben1 file changed, 1 insertion(+), 1 deletion(-)[chenshuai@gitlab ~]$git  push -u  origin dev然后进入gitlab中的zhoulong1中查看dev分支下ceshi文件

8,合并分支


九,gitlab备份与恢复(拓展了解)

注意:gitlab可以使用自身的配置实现数据备份与恢复

1,查看软件版本和系统版本[root@gitlab ~]#cat /opt/gitlab/embedded/service/gitlab-rails/VERSION13.6.1[root@gitlab ~]#cat /opt/gitlab/embedded/service/gitlab-rails/VERSION13.6.12,数据备份查看备份相关的配置项[root@gitlab ~]#vim /etc/gitlab/gitlab.rbgitlab_rails['manage_backup_path'] = true    #开启备份gitlab_rails['backup_path'] = "/data/gitlab/backups"  #指定备份路径##配置修改完成后gitlab-ctl reconfigure 或者 gitlab-ctl restart 重启服务生效3,执行备份命令进行备份[root@gitlab ~]#/opt/gitlab/bin/gitlab-rake   gitlab:backup:create4,添加到 crontab 中定时执行[root@gitlab ~]#crontab -e0 2 * * * bash /opt/gitlab/bin/gitlab-rake gitlab:backup:create可以到/data/gitlab/backups找到备份包,解压查看,会发现备份的还是比较全面的,数据库、repositories、build、upload等分类还是比较清晰的。5,设置备份保留时长防止每天执行备份,有目录被爆满的风险,打开/etc/gitlab/gitlab.rb配置文件,找到如下配置:[root@qfedu.com ~]# vim /etc/gitlab/gitlab.rbgitlab_rails['backup_keep_time'] = 604800设置备份保留7天(7360024=604800),秒为单位,如果想增大或减小,可以直接在该处配置,并通过gitlab-ctl restart 重启服务生效。备份完成,会在备份目录中生成一个当天日期的tar包。6,数据恢复安装部署gitlab  server具体步骤参见上面:gitlab server 搭建过程恢复gitlab7,查看备份相关的配置项[root@gitlab ~]#vim /etc/gitlab/gitlab.rbgitlab_rails['backup_path'] = "/data/gitlab/backups"修改该配置,定义了默认备份出文件的路径,并执行 gitlab-ctl reconfigure 或者 gitlab-ctl restart 重启服务生效。8,恢复数据前要先停掉数据连接服务[root@gitlab ~]#gitlab-ctl stop unicorn[root@gitlab ~]#gitlab-ctl stop sidekiq如果是台新搭建的主机,不需要操作,理论上不停这两个服务也可以。停这两个服务是为了保证数据一致性。如果是台新搭建的主机,不需要操作,理论上不停这两个服务也可以。停这两个服务是为了保证数据一致性。9,同步备份文件到新服务器将老服务器/data/gitlab/backups目录下的备份文件拷贝到新服务器上的/data/gitlab/backups[root@gitlab ~]#rsync -avz 1530773117_2019_03_05_gitlab_backup.tar 10.0.1.86:/data/gitlab/backups/   #也可以用scp注意权限:600权限是无权恢复的。 实验环境可改成了777,生产环境建议修改属主属组[root@gitlab ~]#cd  /data/gitlab/backups[root@gitlab ~]#chown -R git.git 1530773117_2019_03_05_gitlab_backup.tar10,执行命令进行恢复后面再输入两次 yes 就完成恢复了。[root@gitlab ~]#gitlab-rake gitlab:backup:restore BACKUP=1530773117_2018_07_05_gitlab_backup.tar注意:backups 目录下保留一个备份文件可直接执行11,恢复完成启动服务恢复完成后,启动刚刚的两个服务,或者重启所有服务,再打开浏览器进行访问,发现数据和之前的一致:[root@gitlab ~]#gitlab-ctl start unicorn[root@gitlab ~]#gitlab-ctl start sidekiq或gitlab-ctl restart

Linux中级实战部署一:企业级 CICD 持续集成交付发布---(git,github,gitlab)相关推荐

  1. 专题篇四:Linux企业级CICD持续集成交付发布(终极实战部署:gitlab++jenkins+web(tomcat)+webbook自动发布)

    4,企业级CI/CD 持续集成/交付/发布 实验一:github+jenkins+web(tomcat) 构建的时候 网络连接超时(正常现象) githud仓库地址1.安装对应的插件(jenkins) ...

  2. 刚来公司一周,搭建了一套持续集成交付环境,研发效率直接提升20倍,CTO再次给我涨薪!!(全程实战,建议收藏)

    肝了一周的文章,原创不易,全程实战,大家给个一键三连(点赞,评论.收藏)呀,如果有啥问题,可以在文末留言讨论,也可以在CSDN上发私信给我,我看到后都会回复大家.另外,文中涉及的yaml安装文件,大家 ...

  3. 基于kubernetes平台的CICD持续集成

    基于kubernetes平台的CICD持续集成 文章目录 文章目录 基于kubernetes平台的CICD持续集成 文章目录 1.基于k8s集群的Jenkins持续集成 2.将Jenkins部署在k8 ...

  4. 敏捷开发,持续集成/交付/部署, DevOps总结

    文章目录 敏捷开发入门教程 一.迭代开发 二.增量开发 三.敏捷开发的好处 3.1 早期交付 3.2 降低风险 四.如何进行每一次迭代 五.敏捷开发的价值观 六.十二条原则 七.参考链接 持续集成/交 ...

  5. 【K8S】基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持续集成交付环境(环境搭建篇)

    写在前面 最近在 K8S 1.18.2 版本的集群上搭建DevOps环境,期间遇到了各种坑.目前,搭建环境的过程中出现的各种坑均已被填平,特此记录,并分享给大家! 服务器规划 IP 主机名 节点 操作 ...

  6. 24岁秃头程序员教你微服务交付下如何持续集成交付,学不会砍我

    微服务如何持续集成交付 在微服务架构下,每一个微服务都是职责单一的,可独立部署单元,但是众多分散的微服务也带来了代码共享.微服务功能依赖.版本管理等复杂问题,微服务需要解决配置管理.服务持续集成.持续 ...

  7. Linux上快速搭建Jenkins服务器 实现持续集成开发

    http://my.oschina.net/long0419/blog/183299 简介: 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础.Jenkins 是一个开 ...

  8. 【测试开发】的Devops持续集成部署体系之Jenkins持续集成和持续部署基础应用

    目录 [一]:Jenkins 持续集成安装及使用简介 一.前言 二.初始化 Jenkins 插件和管理员用户 2.1 进入如下页面,输入上面出现的口令 2.2 进入选择安装插件的页面后,可以选择安装社 ...

  9. cicd持续集成全程_CICD-持续集成amp;持续交付

    集成是指软件个人研发的部分向软件整体部分交付,以便尽早发现个人开发部分的问题: 交付是指研发尽快向客户交付,以便尽早发现生产环境中存在的问题. 如果说等到所有东西都完成了才向下个环节交付,导致所有的问 ...

最新文章

  1. 如何掌握并在实践中自如运用设计模式
  2. JZOJ 4366. 【GDKOI2016】项链
  3. 字符串-长度、计数、位置方法演练
  4. linux安装mysql遇到的问题_Linux下安装MySQL5.7及遇到的问题解决方法
  5. css随堂笔记(一)
  6. 【Python】Paramiko模块在Windows10中import ssl报错的处理方法
  7. NET牛人应该知道些什么
  8. xp和linux的引导文件,Linux与XP双系统中grub引导配置笔记
  9. jersey REST的接口简述
  10. The Robustness of Deep Networks A geometrical perspective论文解读
  11. python快速编辑入门答案_1.1、Python快速入门(0529)
  12. android手机deviceowner,Android之解决Gigaset手机不能设置DeviceOwner权限提示already provisioned问题...
  13. 【NOIP2011提高组】观光公交
  14. JavaScript中的作用域及作用域链
  15. java实现简单的文件下载
  16. 微信小程序如何刷浏览量和访问量?
  17. BES蓝牙耳机进入待机状态设计
  18. 我的暗影精灵BIOS做过的更改
  19. 单调队列(P3088 Crowded Cows S)
  20. mysql时间读不了了_Mysql之复习

热门文章

  1. 01Trie树 CF923C Perfect Security
  2. 讲真的,我并不看好元宇宙
  3. ubuntu修改用户密码及开启ssh服务
  4. 用PyTorch实现CIoU NMS,DIoU NMS和GIoU NMS
  5. mysql读取工具下载_百度云文件数据库读取工具
  6. 双击BACK键退出程序
  7. 陕西省2023年度化学工程中级职称评审条件和材料归纳
  8. 深度学习:目标分割|UNet网络模型及案例实现
  9. 自定义重复注解 @Repeatable 使用方式
  10. go语言安装与环境配置