持续集成
1. 基础知识
1. devops 产生原因
- dev(development) 开发、ops (operation)运维,但是开发和运维在本质上是相互冲突的,开发要根据客户需求做出相应的改变,适应市场的变化,而运维则是保持系统或产品的稳定性。所以为了更好的解决两者的冲突,devops应运而生。
2. devops 的作用
- 提高产品质量
- 自动化测试
- 代码质量管理工具
3. devops 如何实现
- 设计架构规划
---->
代码的存储方式----->
构建、测试、预生产、部署、监控
4. 版本控制系统简介
- 版本控制系统是一种记录一个或若干个文件内容变化,以便将来查阅特定版本内容情况的系统
5. 版本控制系统特点
- 记录文件所有历史变化
- 随时可恢复到任何一个历史状态
- 多人协作开发
6. 常见的版本控制系统工具
- SVN
集中式的版本控制系统,只有一个中央数据仓库,如果中央数据仓库挂了或者不可访问,所有使用者就无法使用 SVN ,无法进行提交或者文件备份。 - Git
分布式的版本控制系统,在每个使用者电脑上都有一个完整的数据仓库,没有网络依然可以使用Git,当然为了习惯及团队协作,会将本地数据同步到Git服务器或者GitHub等代码仓库。
7. git 目录介绍
- 工作目录,即使用
git init
初始化的目录 - 暂存区,在工作目录中使用
git add
命令将文件添加到暂存区,即隐藏目录中的 index 文件 - 本地仓库,在工作目录使用
git commit
命令将文件提交到本地仓库 - 远程仓库,只有本地仓库的文件才能使用
git push
命令推到远程仓库。
2. Git 安装部署
`yum` install -y git
git config --global user.name "lsk" # 创建用户
git config --global user.email "example@qq.com" # 用户email
git config --global color.ui true # 语法高亮
mkdir /data/gitroot # 创建仓库
cd /data/gitroot
git init # 初始化仓库
git status # 查看当前工作区状态
3. Git 隐藏文件介绍
tree ./
./
├── branches # 分支目录
├── config # 定义项目特有的配置选项
├── description # 仅供 git web 程序使用
├── HEAD # 指示当前的分支
├── hooks # 包含 git 钩子文件
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ └── update.sample
├── info # 包含一个全局排除文件(exclude)
│ └── exclude
├── objects # 存放所有数据内容
│ ├── info
│ └── pack
└── refs # 存放指向数据的提交对象的指针信息
├── heads
└── tags
index # 保存暂存区信息,在 git add 之前没有
4. git 常用命令介绍
1. 增加、提交、推送
-
向暂存区增加文件
git add 1.txt # 向暂存区添加 1.txt 文件, ## 注意:1.txt 必须在工作区中 git add . # 向暂存区添加工作区中所有的文件 ## 错误fatal: Not a git repository (...): .git # 解决:重新 git init 即可。
-
向本地仓库提交文件
git commit -m "add all file" # 向本地仓库提交暂存区所有的文件 git commit -m "commit a file 1.txt" 1.txt # 向本地仓库提交暂存区中的 1.txt 文件
2. 删除文件
-
删除工作区文件
rm -rf 1.txt git checkout 1.txt # 若是误删了,而且暂存区或者本地仓库有这个文件,可以用这个命令找回
-
删除暂存区文件
git rm --cached 1.txt # 工作区还有该文件
-
彻底删除文件
git rm 1.txt
3. 修改文件
-
向文件添加内容
echo "hello world2" >> 1.txt git add 1.txt git commit -m"version 2" [只需要在重新增加和提交即可]
-
修改文件名称
git mv a a.txt # 将 a 修改为 a.txt git commit -m "modify a a.txt" # 提交修改
4. 比对两个文件的内容
-
比对工作目录中不同文件的内容
diff c.txt d 1c1 < hello gx --- > hello cat c.txt hello gx cat d hello
-
比对工作区和暂存区的内容
git diff a diff --git a/a b/a index ce01362..94954ab 100644 --- a/a +++ b/a @@ -1 +1,2 @@ hello +world
-
比对暂存区和本地仓库的内容
git diff --cached a diff --git a/a b/a index 94954ab..d3b4ea7 100644 --- a/a +++ b/a @@ -1,2 +1,3 @@ hello world +gx
5. 版本回溯
git log # 获取回溯版本的hash值,如dc72730
git log --oneline # 每个版本信息只占一行,简洁
git log -p # 显示更改内容
git reflog # 显示所有的版本
git reset --hard dc72730 # 即可恢复到原来的版本
5. 建立远程仓库
-
在网页上的操作
- 在
GitHub
上注册账号 - 点击
new
- 名字自定义,例如
gitroot
,然后选中Public
,点击Createrepository
按钮 - 添加
key
:单击右上角自己的头像,在下拉菜单中选择settings
选项 - 在跳转的页面中左侧菜单栏选择
SSH and GPG keys
,右侧单击New SSH key
按钮,把Linux机器上的/root/.ssh/id_rsa.pub
内容粘贴到这里。
- 在
-
在Linux主机上的操作
ssh-keygen # 生成密钥 git remote add origin url # url 是在GitHub上复制的 git push -u origin master # 将本地仓库推送到远程仓库 git remote add origin git@github.com:g-x-mz/testing.git cd /opt/ git clone url # 将远程仓库克隆到本地 git clone git@github.com:g-x-mz/hello-world.git [在本地仓库操作完数据后,需要 git push 才能和远程同步!!]
6. git 分支
-
分支操作
git branch # 查看分支 * master # 星号代表当前在那个分支位置 git branch lsk # 创建分支 git checkout lsk # 切换到了lsk分支下
-
分支的合并
git checkout master # 合并分支之前,先切换到目标分支 git merge lsk # 把 lsk 分支合并到了 master ## 若有了分支冲突,则手动更改冲突文件,然后再提交和增加即可
-
分支删除
git branch -d lsk # 删除分支 git branch -D lsk # 如果分支没有合并,就不能删除,该命令强制删除
-
对于分支的应用,建议大家以这样的原则来:
- master分支是非常重要的,线上发布代码用这个分支,平时我们开发代码不要在这个分支上
- 创建一个dev分支,专门用作开发,只有当发布到线上之前,才会把dev分支合并到master。
- 开发人员应该在dev的基础上再分支成个人分支,个人分支(在自己PC上)里面开发代码,然后合并到dev分支。
⑤ 远程分支
# git ls-remote origin //查看远程分支
# git push origin branch-name //将本地的特定分支推送到远程
# git pull //如果 push 失败,可以试试这个,然后再 push
# git checkout -b branch-name origin/branch-name //git clone 的时候,默认只把 master 分支克隆下来。如果想,要克隆其他分支,用这个命令。
7. git 标签
标签类似于快照功能,可以给版本库打一个标签,记录某个时刻库的状态。也可以随时恢复到该状态。
git tag v1.o # 建立一个名为 v1.o 的标签,在 master 分支上
git tag -a tag-name -m "expression" # 对标签进行描述
git tag tag-name hash-key # 针对历史 hash 值打标签
git show v1.o # 查看标签的详细信息
git tag # 查看所有的标签名
git log --oneline --abbrev-commit # 查看历史 commit
git rest --hard tag-name # 回到指定标签版本
git tag -d tag-name # 删除标签
git push origin tag-name # 推送指定标签到远程
git push --tag origin # 推送所有标签
既要删除本地标签又要删除远程标签
git tag tag-name -d
git push origin :refs/tags/tag-name
8. git 别名
# git config --global alias.ci commit //将 commit 改名为 ci
# git config --list | grep alias //查看已设别名
# git config --global --unset alias.ci //取消 ci 别名
**查询 log 小技巧
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
2.6 git 服务器的搭建
//找一台服务器,首先要安装Git
# yum install git
# git config --global user.name "lsk" //配置基本信息
#git config --global user.email "example@qq.com"
//添加git用户,并且设置shell为/usr/bin/git-shell,目的是为了不让git用户远程登陆
# useradd -s /usr/bin/git-shell git
# cd /home/git
//创建authorized_keys文件,并更改属主、属组和权限,用来存客户端机器上的公钥
# mkdir .ssh
# touch .ssh/authorized_keys
# chown -R git.git .ssh
# chmod 600 .ssh/authorized_keys
# ll /home/git/.ssh/authorized_keys
-rw-------. 1 git git 1226 Aug 5 07:03 /home/git/.ssh/authorized_keys
//定好存储Git仓库的目录,比如 /data/gitpub
# mkdir /data/gitpub
# cd /data/gitpub
# git init --bare sample.git //会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾
# chown -R git.git sample.git
# ll
total 4
drwxr-xr-x. 7 git git 4096 Aug 5 10:01 sample.git
【客户端的操作如下】
//首先要把客户端上的公钥放到git服务器/home/git/.ssh/authorized_keys文件里
//在客户端上克隆远程仓库
# git clone git@ip:/data/gitpub/sample.git
9. gitlab 的使用
-
下载安装软件
vim /etc/yum.repos.d/gitlab.repo [输入内容如下] [gitlab-ce] name=Gitlab CE Repository baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/ gpgcheck=0 enabled=1 [精致的结尾] yum install -y gitlab-ce gitlab-ctl reconfigure # 重新加载 netstat -lnpt # 查看监听端口,主要查看 Nginx 的监听端口 gitlab-ctl start ##### # 也可以安装官网的方式进行部署 https://about.gitlab.com/install/#centos-7
-
网页上操作
# 在网页上输入 https://192.168.80.140:443 ,然后进行相应的操作即可,默认管理员root,无密码,它会让我们去定义一个密码,至少8位数 # GitLab常用命令 https://www.cnyunwei.cc/archives/1204
-
将本地仓库推向远程
# 首先在网页上建立好组和项目,然后根据项目上的提示操作Linux虚拟机。在Linux虚拟机上生成公钥,然后进行推送即可,若推送有问题,则需要修改配置文件 vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml -------------------------------------------------------------------- ## GitLab settings gitlab: ## Web server settings (note: host is the FQDN, do not include http://) host: localhost >> 这里改为主机的IP即可 port: 443 https: false -------------------------------------------------------------------- # 然后将 origin 用户删除,刷新网页,获得新的 URL,创建用户 origin,再次推送即可。
-
开发者向仓库推送文件
# 首先先将仓库内的内容下载下来 # 然后再根据要求进行相应的上传操作 # 还可以在网页上配置 master 分支受保护,在仓库建立新的分支后,开发者并不会收到相应的信息,需要用 git pull 刷新一下 # 开发者也可以通过网页向仓库请求合并分支
//GitLab备份
# gitlab-rake gitlab:backup:create //创建备份压缩包
//备份目录在/var/opt/gitlab/backups
# ls /var/opt/gitlab/backups/
# gitlab-ctl stop unicorn ; gitlab-ctl stop sidekiq
# gitlab-rake gitlab:backup:restore BACKUP=xxxxx //(这里是一个编号,即备份文件的前缀) //恢复备份