gitlab

CI/CD

  • CI:持续集成
  • CD:持续交付(部署)
推送
拉取
下载
下载
下载
程序猿/媛
git服务器
jenkins
appserver
appserver
appserver

git

  • 基本配置
[root@localhost ~] yum install -y git
[root@localhost ~] git config --global user.name "xxx"
[root@localhost ~] git config --global user.email "xxx@tedu.cn"
[root@localhost ~] git config --global core.editor vim
[root@localhost ~] git config --list
[root@localhost ~] cat ~/.gitconfig 
  • git重要的工作区域
    • 工作区:软件项目目录
    • 暂存区:.git目录下的index,它是工作区和版本库的缓冲地带
    • 版本库:工作区下面的.git目录
工作区 暂存区 版本库 git add git commit 工作区 暂存区 版本库
  • 创建仓库
# 方法一:没有项目目录之前创建
[root@localhost ~] mkdir myprojects
[root@localhost ~] cd myprojects/
[root@localhost myprojects] git init mytest
初始化空的 Git 版本库于 /root/myprojects/mytest/.git/
[root@localhost myprojects] ls
mytest
[root@localhost myprojects] ls -A mytest/
.git

# 方法二:在已有项目目录中创建版本库
[root@localhost myprojects] mkdir myweb
[root@localhost myprojects] cd myweb/
[root@localhost myweb] echo '<h1>My Test Web Site</h1>' > index.html
[root@localhost myweb] cat index.html 
<h1>My Test Web Site</h1>
[root@localhost myweb] git init 
初始化空的 Git 版本库于 /root/myprojects/myweb/.git/
[root@localhost myweb] ls -A
.git  index.html
  • 文件的状态
    • 未跟踪:工作区中的文件,但是既不在暂存区,也不在版本库
    • 已跟踪:
      • 未修改:确认至版本库后,没有改动过
      • 已修改:确认至版本库后,修改过,但尚未暂存
      • 已暂存:确认至版本库后,修改过,已加入暂存区
  • git操作
[root@localhost myweb] cp /etc/passwd .
[root@localhost myweb] git status 
# 位于分支 master
#
# 初始提交
#
# 未跟踪的文件:
#   (使用 "git add <file>..." 以包含要提交的内容)
#
#	index.html
#	passwd
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

[root@localhost myweb] git add index.html
[root@localhost myweb] git status
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
#   (使用 "git rm --cached <file>..." 撤出暂存区)
#
#	新文件:    index.html
#
# 未跟踪的文件:
#   (使用 "git add <file>..." 以包含要提交的内容)
#
#	passwd

[root@localhost myweb] git commit -m "pro init"
分支 master
# 未跟踪的文件:
#   (使用 "git add <file>..." 以包含要提交的内容)
#
#	passwd
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

# 如果希望永远不要把某些文件确认至版本库,可以用.gitignore文件记录
[root@localhost myweb] echo passwd > .gitignore
[root@localhost myweb] echo '.gitignore' >> .gitignore 
[root@localhost myweb] cat .gitignore
.gitignore
passwd
[root@localhost myweb] git status
# 位于分支 master
无文件要提交,干净的工作区

# 查看版本库内的文件
[root@localhost myweb] git ls-files
index.html

# 修改文件
[root@localhost myweb] echo '<h2>headline 2</h2>' >> index.html 
[root@localhost myweb] git status
# 位于分支 master
# 尚未暂存以备提交的变更:
#   (使用 "git add <file>..." 更新要提交的内容)
#   (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
#	修改:      index.html
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a"# 将工作区所有文件都暂存
[root@localhost myweb] git add .
[root@localhost myweb] git status
# 位于分支 master
# 要提交的变更:
#   (使用 "git reset HEAD <file>..." 撤出暂存区)
#
#	修改:      index.html
#

# 将文件撤出暂存区
[root@localhost myweb] git reset HEAD index.html
重置后撤出暂存区的变更:
M	index.html
[root@localhost myweb] git status
# 位于分支 master
# 尚未暂存以备提交的变更:
#   (使用 "git add <file>..." 更新要提交的内容)
#   (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
#	修改:      index.html
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a"# 使用版本库中的文件覆盖工作区中的文件
[root@localhost myweb] cat index.html 
<h1>My Test Web Site</h1>
<h2>headline 2</h2>
[root@localhost myweb] git checkout -- index.html
[root@localhost myweb] cat index.html 
<h1>My Test Web Site</h1>

# 改名
[root@localhost myweb] cp /etc/hosts .
[root@localhost myweb] git add .
[root@localhost myweb] git commit -m "add hosts"
[root@localhost myweb] git mv hosts hosts.txt
[root@localhost myweb] git add .
[root@localhost myweb] git commit -m "mv hosts hosts.txt"
[root@localhost myweb] ls
hosts.txt  index.html  passwd
[root@localhost myweb] git status
# 位于分支 master
无文件要提交,干净的工作区

# 删除
[root@localhost myweb] git rm hosts.txt
rm 'hosts.txt'
[root@localhost myweb] git commit -m "rm hosts.txt"
[root@localhost myweb] ls  # 工作区中没有hosts.txt
index.html  passwd
[root@localhost myweb] git ls-files  # 在版本库中也删除了
index.html

# 切换到以前的某个状态,找到删除的hosts.txt
[root@localhost myweb] git log
commit 83d0189faaa2d9d03d9cd787ae1a84d64cfb5fc3
Author: MrZhangzhg <zhangzhg@tedu.cn>
Date:   Sat Mar 28 10:57:19 2020 +0800
	
    rm hosts.txt

commit 3398af986b160cb245a6803330d4fafe15819c32
Author: MrZhangzhg <zhangzhg@tedu.cn>
Date:   Sat Mar 28 10:56:32 2020 +0800

    mv hosts hosts.txt
... ...
[root@localhost myweb] git checkout 3398af986b160cb245a6803330d4fafe15819c32
[root@localhost myweb] ls
hosts.txt  index.html  passwd

# 返回到最新状态
[root@localhost myweb] git checkout master
之前的 HEAD 位置是 3398af9... mv hosts hosts.txt
切换到分支 'master'
[root@localhost myweb] ls
index.html  passwd

分支管理

  • git有一个默认的分支叫master
  • master其实就是一个指针,总是指向最新的一个提交
  • 有一个名为HEAD的指针,指向某个节点
c2
c1
c3
master
HEAD
  • checkout时,其实就是移动了HEAD指针
[root@localhost myweb] git checkout 3398af986b160cb245a6803330d4fafe15819c32
... ...
HEAD 目前位于 3398af9... mv hosts hosts.txt
c2
c1
c3
master
HEAD
[root@localhost myweb] git checkout master
之前的 HEAD 位置是 3398af9... mv hosts hosts.txt
切换到分支 'master'
  • 创建分支
# 创建名为b1的分支
[root@localhost myweb] git branch b1
[root@localhost myweb] git branch 
  b1
* master   # *表示当前所处分支

# 在master分支上提交代码
[root@localhost myweb] cp /etc/login.defs .
[root@localhost myweb] git add .
[root@localhost myweb] git commit -m "add login file"
[root@localhost myweb] ls
index.html  login.defs  passwd

# 切换到b1分支提交代码
[root@localhost myweb] git checkout b1
切换到分支 'b1'
[root@localhost myweb] git branch 
* b1
  master
[root@localhost myweb] ls  # b1分支没有login.defs
index.html  passwd
[root@localhost myweb] cp /etc/issue .
[root@localhost myweb] git add .
[root@localhost myweb] git commit -m "add issue file"
[root@localhost myweb] ls
index.html  issue  passwd
c2
c1
c3
c4
master
HEAD
b1
c5
# b1分支的功能实现完毕后,可以回到master,将b1汇入到master
[root@localhost myweb] git checkout master
[root@localhost myweb] git merge b1 -m "merge b1 to master"
[root@localhost myweb] ls
index.html  issue  login.defs  passwd
c2
c1
c3
c4
master
c6
HEAD
c5
b1
# 当分支完成它的功能后,可以删除它
[root@localhost myweb] git branch -d b1
已删除分支 b1(曾为 b36c6fd)。

tag管理

  • tag就是标记
  • 一般来说,在有重大更新时,可以为某一个提交打个标记
  • 经常用于版本标记
[root@localhost myweb] git tag 1.0
[root@localhost myweb] git tag  # 查看tag
1.0
[root@localhost myweb] echo '<h2>my site 2.0</h2>' >> index.html 
[root@localhost myweb] git add .
[root@localhost myweb] git commit -m "my site 2.0"
[root@localhost myweb] git tag 2.0
[root@localhost myweb] git tag
1.0
2.0

gitlab服务器

  • 配置要求:内存4GB以上,否则无法运行

  • 安装

[root@localhost docker] rpm -ihv docker_pkgs/*
[root@localhost docker] systemctl start docker
[root@localhost docker] systemctl enable docker
  • 导入镜像
[root@localhost docker] docker load -i images/gitlab_zh.tar 
# 修改宿主机ssh端口号
[root@localhost docker] vim /etc/ssh/sshd_config 
Port 2022
[root@localhost docker] systemctl restart sshd
# 退出再连接
[root@localhost ~] ssh -p2022 192.168.113.135
# 启动gitlab容器
[root@localhost ~] docker run -d -h gitlab --name gitlab -p 443:443 -p 22:22 -p 80:80 --restart always -v /srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /srv/gitlab/data:/var/opt/gitlab gitlab_zh:latest 
[root@localhost ~] docker ps  # 直到状态出现healty才可用
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                            PORTS                                                          NAMES
80b789ebdf6e        gitlab_zh:latest    "/assets/wrapper"   8 seconds ago       Up 7 seconds (health: starting)   0.0.0.0:22->22/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   gitlab

gitlab应用

  • 访问http://192.168.113.135
  • 第一次登陆,需要为root用户创建密码。密码必须8位以上,并且符合复杂度要求。
  • 登陆后,点击页面顶部的扳手图标 -> 左边栏外观 ->设置公司logo,登陆页的内容
  • 在gitlab中重要的概念有:
    • 用户:对应着使用gitlab服务器的用户
    • 组:对应开发团队
    • 项目:对应软件项目
  • 创建名为devops的组,可见等级为公开
  • 创建普通用户。在创建用户时不能设置密码。用户创建完成后,编辑用户可以修改其密码。
  • 将用户加入到devops组中,成为主程序员。点击群组后,将用户加入组中。
  • 创建名为myweb的项目,隶属于devops组,类型公开
切换用户,上传代码
  • 用户首次登陆时,需要修改密码
# 切换到项目目录
[root@localhost myprojects] cd myweb/
# 查看远程仓库,没有仓库
[root@localhost myweb] git remote -v
# 添加名为origin的远程仓库,将远程url起名为origin,作为代码仓库
[root@localhost myweb] git remote add origin \
http://192.168.113.135/devops/myweb.git
# 推送本地所有分支到origin仓库
[root@localhost myweb] git push -u origin --all
Username for 'http://192.168.113.135': zzg
Password for 'http://zzg@192.168.113.135': 1234.com
# 推送tag到origin仓库
[root@localhost myweb] git push -u origin --tags
Username for 'http://192.168.113.135': zzg
Password for 'http://zzg@192.168.113.135': 1234.com
ssh免密推送代码
# 生成密钥
[root@localhost myweb] ssh-keygen 
# 拷贝公钥
[root@localhost myweb] cat ~/.ssh/id_rsa.pub
# 在web页面中点击右上角的用户 -> 设置 -> 左边栏 ssh 密钥 -> 将公钥粘贴到密钥栏中。
# 修改代码上传方式为ssh免密上传
[root@localhost myweb] git remote -v
origin	http://192.168.113.135/devops/myweb.git (fetch)
origin	http://192.168.113.135/devops/myweb.git (push)
[root@localhost myweb] git remote remove origin
[root@localhost myweb] git remote -v # origin已删除
[root@localhost myweb] git remote add origin \
git@192.168.113.135:devops/myweb.git
[root@localhost myweb] git remote -v
origin	git@192.168.113.135:devops/myweb.git (fetch)
origin	git@192.168.113.135:devops/myweb.git (push)
# 上传代码测试
[root@localhost myweb] vim README.md
# gitlab server test
​```python
print('Hello World!')```
[root@localhost myweb] vim README.md
[root@localhost myweb] git add .
[root@localhost myweb] git commit -m "add readme"
[root@localhost myweb] git push
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值