版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
实现跨区域多人协同开发
追踪和记载一个或者多个文件的历史记录
组织和保护你的源代码和文档
统计工作量
并行开发、提高开发效率
跟踪记录整个软件的开发过程
减轻开发人员的负担,节省时间,同时降低人为错误
简单说就是用于管理多人协同开发项目的技术。
主流的版本控制器有如下这些:
Git
SVN(Subversion)
CVS(Concurrent Versions System)
VSS(Micorosoft Visual SourceSafe)
TFS(Team Foundation Server)
Visual Studio Online
版本控制产品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),现在影响力最大且使用最广泛的是Git与SVN
(1)本地版本控制
记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS。
(2)集中版本控制
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改.
但是server端一旦出现故障,整个版本控制系统就不能用了。
所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、CVS、VSS
所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。
Git是目前世界上最先进的分布式版本控制系统。
Git是免费、开源的
最初Git是为辅助 Linux 内核开发的,来替代 BitKeeper
Git特点:
速度
简单的设计
对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
完全分布式
有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。
Git必看秘籍:https://git-scm.com/book/zh/v2
Git 有三种状态:已提交(committed)、已修改(modified) 和 已暂存(staged)。
已修改表示修改了文件,但还没保存到数据库中。
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
已提交表示数据已经安全地保存在本地数据库中。
这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。
[root@server2 ~]# mkdir demo
[root@server2 ~]# cd demo/
[root@server2 demo]# ls
[root@server2 demo]# git init ##git 初始化
Initialized empty Git repository in /root/demo/.git/
[root@server2 demo]# ls
[root@server2 demo]# ls -a
. .. .git
[root@server2 demo]# ls .git/ ## 没事儿别在里面瞎溜达
branches config description HEAD hooks info objects refs
(1)创建文件并添加至暂存区:
[root@server2 demo]# touch readme.md
[root@server2 demo]# ls
readme.md
[root@server2 demo]# git status ## 不加-s 代表详尽输出 适合初学者 (在不知道下一步如何操作的情况下)
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# readme.md
nothing added to commit but untracked files present (use "git add" to track)
[root@server2 demo]# git status -s ## ?? 代表刚添加进来 还没在版本库 还没进行追踪
?? readme.md
[root@server2 demo]# git add readme.md (或者git add . 代表将刚刚修改的所有数据都add到暂存区)
[root@server2 demo]# git status -s ## A的意思是表示已经将文件添加到暂存区
A readme.md
(2)提交至版本库:
[root@server2 demo]# git commit -m "add readme.md"
*** Please tell me who you are.
Run
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'root@server2.(none)')
[root@server2 demo]# git config --global user.email "[email protected]" ##谁在什么时间提交了什么 一目了然 便于审计
[root@server2 demo]# git config --global user.name "zlw"
[root@server2 demo]# git commit -m "add readme.md"
[master (root-commit) e6dab9e] add readme.md
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 readme.md
[root@server2 demo]# git status -s ## 什么都没有差到 说明当前的版本库没有任何的修改
[root@server2 demo]#
(3)当再次修改文件 查看其状态
[root@server2 demo]# echo westos > readme.md
[root@server2 demo]# git status -s ## 一旦添加到版本库的文件 都会处于追踪状态 系统会一直跟踪这个文件的变更
M readme.md
[root@server2 demo]# git add readme.md
[root@server2 demo]# git status -s ##注意 此时两个M 不在一个位置 一个在左边 一个在右边 在工作区做的修改 M会显示在右边 ,添加到暂存区后 M会显示在左边
M readme.md
[root@server2 demo]# echo redhat >> readme.md
[root@server2 demo]# git status -s
MM readme.md
[root@server2 demo]# git add readme.md
[root@server2 demo]# git status -s
M readme.md
[root@server2 demo]# git commit -m "update readme.md"
[master bd3ea00] update readme.md
1 file changed, 2 insertions(+)
注意下图中M的位置。
(4)$ cat .gitignore
.* //忽略所有隐藏文件
/test //只忽略当前目录下的test文件
build/ //忽略任何目录下名为 build 的文件夹
[root@server2 demo]# touch .a
[root@server2 demo]# touch .o
[root@server2 demo]# l.
. .. .a .git .o
[root@server2 demo]# mkdir env
[root@server2 demo]# ls
env readme.md
[root@server2 demo]# touch env/file1
[root@server2 demo]# git status -s
?? .a
?? .o
?? env/
[root@server2 demo]# vim .gitignore
[root@server2 demo]# cat .gitignore
.*
env
[root@server2 demo]# git status -s
.gitignore 的意思是 你要忽略哪些文件
(5)删除
但是要注意 在git版本中 任何时候都是可以后悔的:
[root@server2 demo]# ls
env readme.md
[root@server2 demo]# rm -f readme.md
[root@server2 demo]# ls
env
[root@server2 demo]# git status -s
D readme.md
[root@server2 demo]# git status
# On branch master
# Changes not staged for commit:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: readme.md
#
no changes added to commit (use "git add" and/or "git commit -a")
[root@server2 demo]# git checkout -- readme.md
[root@server2 demo]# ls
env readme.md
版本控制系统的好处,可以通过查看日志 来回到任一个历史版本
[root@server2 demo]# git commit -m "del readme.md"
[master e6f02f1] del readme.md
1 file changed, 2 deletions(-)
delete mode 100644 readme.md
[root@server2 demo]# ls
env
[root@server2 demo]# git log
commit e6f02f14629b8a2be79f754753f345f3b6fb9ee5
Author: zlw <[email protected]>
Date: Fri Mar 18 11:32:41 2022 +0800
del readme.md
commit bd3ea003ab82aec7d2655553214c1cb08cbd814b
Author: zlw <[email protected]>
Date: Fri Mar 18 10:59:49 2022 +0800
update readme.md
commit e6dab9e0011855905b39ad62b66207b0ca20604c
Author: zlw <[email protected]>
Date: Fri Mar 18 10:48:40 2022 +0800
add readme.md
[root@server2 demo]# git reflog ## 查看简略版本的日志
e6f02f1 HEAD@{0}: commit: del readme.md
bd3ea00 HEAD@{1}: commit: update readme.md
e6dab9e HEAD@{2}: commit (initial): add readme.md
[root@server2 demo]# git reset --hard bd3ea00 ## 回到删除该文件的版本
HEAD is now at bd3ea00 update readme.md
[root@server2 demo]# ls
env readme.md
总结一下git的使用命令:
[root@server2 demo]# git push -u origin "master"
The authenticity of host 'gitee.com (180.97.125.228)' can't be established.
ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
ECDSA key fingerprint is MD5:27:e5:d3:f7:2a:9e:eb:6c:93:cd:1f:c1:47:a3:54:b1.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitee.com,180.97.125.228' (ECDSA) to the list of known hosts.
Counting objects: 6, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (6/6), 424 bytes | 0 bytes/s, done.
Total 6 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.3]
To [email protected]:chdzlw666/demo.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
gitlab - 基于git的项目管理软件。
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。GitLab由乌克兰程序员DmitriyZaporozhets和ValerySizov开发,它由Ruby写成。后来,一些部分用Go语言重写,现今并在国内外大中型互联网公司广泛使用。
因为企业内部的代码有很强的隐私性,需要用私人仓库gitlab。
官网:https://about.gitlab.com/install/
#安装依赖
yum install -y curl policycoreutils-python openssh-server perl
#下载并安装软件
wget https://omnibus.gitlab.cn/el/7/gitlab-jh-14.8.2-jh.0.el7.x86_64.rpm
rpm -ivh gitlab-jh-14.8.2-jh.0.el7.x86_64.rpm
vim /etc/gitlab/gitlab.rb
external_url 'http://172.25.254.2' //访问gitlab的地址
gitlab-ctl reconfigure //重载服务 (每次改完上述文件后 都需要用reconfigure重置一下)
登录gitlab:
http://172.25.254.2 //用户:root 第一次登录需要强制修改密码
安装完成后,查看状态,可以看到已经安装的组件。
下图所示 官方给出的出示账号和密码:
试用账号密码进入页面后,改密码:
加客户端SSH密钥(公钥),做免密登录:
创建项目:
# echo www.westos.org > index.html
# git add index.html //添加
# git commit -m "add index.html" //提交
# git push -uf origin main //上传
jenkins就是一个整合工具,把代码从git或者其他代码托管平台拉取过来,然后通过脚本语言编写执行流程,达到了项目一键启动的目的
Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。
CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。
CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。
软件下载:https://jenkins.io/zh/download/
国内镜像站:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
安装jenkins:
#下载jenkins软件包
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.338-1.1.noarch.rpm
yum install -y java-1.8.0-openjdk.x86_64 //安装jdk依赖 (jenkins是运行在java环境中的)
yum install -y jenkins-2.338-1.1.noarch.rpm //安装jenkins软件包
systemctl start jenkins.service //启动jenkins服务
我们的安装是比较顺利的,但是一般来说,第一次开启他比较慢,那如何解决这个问题呢?
更改jenkins镜像源:
注意:默认jenkins升级的网站访问速度较慢,因此需要测试后寻找速度较快的镜像源
测试jenkins的镜像源网速
curl -sSL https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/speed-test.sh | bash(此条命令可以多试几次,找一个对于你来说稳定的源)
#测试jenkins的镜像源网速
curl -sSL https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/speed-test.sh | bash
更新插件源:
vim /var/lib/jenkins/hudson.model.UpdateCenter.xml ##更改更新中心中的下载源
1
2 <sites>
3 <site>
4 <id>defaultid>
5 <url>https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/updates/ustc/update-center.jsonurl>
6 site>
7 sites>
默认走手动设置的镜像源时需要一个证书,安装证书过程如下:
#创建证书目录
mkdir /var/lib/jenkins/update-center-rootCAs
#下载证书
wget https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/rootCA/update-center.crt -O /var/lib/jenkins/update-center-rootCAs/update-center.crt
#更改证书权限
chown jenkins.jenkins -R /var/lib/jenkins/update-center-rootCAs
镜像源更改完成后重启jenkins服务即可生效
访问: http://172.25.254.3:8080
使用初始密码登录:cat /var/lib/jenkins/secrets/initialAdminPassword
安装默认插件即可,使用admin用户,登录后修改密码。
[root@server3 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
7178c9d7844144fca6b2c11df9eeb24f
将获取到的密码 输入 即可进入页面:
进去以后安装推荐的插件即可:
然后修改密码:
下载中文包:(参考博客:https://blog.csdn.net/qq_32352777/article/details/109267797)