自动化运维之CI/CD——持续集成与持续交付(1)

持续集成与持续交付(1)

  • 一、git初见
    • 1.什么是版本控制
    • 2.常见的版本控制器
    • 3.版本控制分类
    • 4.git简介
    • 5.git安装
    • 6.git使用
    • 7.git远程仓库
    • 8.git clone
  • 二、gitlab代码仓库
  • 三、jenkins持续集成
    • 1.简介
    • 2.jenkins安装
    • 3.访问jenkins

一、git初见

1.什么是版本控制

版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。

实现跨区域多人协同开发
追踪和记载一个或者多个文件的历史记录
组织和保护你的源代码和文档
统计工作量
并行开发、提高开发效率
跟踪记录整个软件的开发过程
减轻开发人员的负担,节省时间,同时降低人为错误
简单说就是用于管理多人协同开发项目的技术。

2.常见的版本控制器

主流的版本控制器有如下这些:

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

3.版本控制分类

(1)本地版本控制

记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS。
自动化运维之CI/CD——持续集成与持续交付(1)_第1张图片
(2)集中版本控制

所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改.
但是server端一旦出现故障,整个版本控制系统就不能用了。

所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、CVS、VSS

自动化运维之CI/CD——持续集成与持续交付(1)_第2张图片
(3)分布式版本控制系统

所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。

自动化运维之CI/CD——持续集成与持续交付(1)_第3张图片

4.git简介

Git是目前世界上最先进的分布式版本控制系统。

Git是免费、开源的

最初Git是为辅助 Linux 内核开发的,来替代 BitKeeper

Git特点:
速度
简单的设计
对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
完全分布式
有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。

Git必看秘籍:https://git-scm.com/book/zh/v2

Git 有三种状态:已提交(committed)、已修改(modified) 和 已暂存(staged)。
已修改表示修改了文件,但还没保存到数据库中。
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
已提交表示数据已经安全地保存在本地数据库中。

这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。

自动化运维之CI/CD——持续集成与持续交付(1)_第4张图片

5.git安装

自动化运维之CI/CD——持续集成与持续交付(1)_第5张图片

6.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的位置。
自动化运维之CI/CD——持续集成与持续交付(1)_第6张图片
(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 的意思是 你要忽略哪些文件
自动化运维之CI/CD——持续集成与持续交付(1)_第7张图片
(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

自动化运维之CI/CD——持续集成与持续交付(1)_第8张图片

总结一下git的使用命令:

7.git远程仓库

自动化运维之CI/CD——持续集成与持续交付(1)_第9张图片
自动化运维之CI/CD——持续集成与持续交付(1)_第10张图片
自动化运维之CI/CD——持续集成与持续交付(1)_第11张图片
自动化运维之CI/CD——持续集成与持续交付(1)_第12张图片
向gitee上推送本机项目

[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.

自动化运维之CI/CD——持续集成与持续交付(1)_第13张图片
以此类推,上传项目到本地gitee中:
自动化运维之CI/CD——持续集成与持续交付(1)_第14张图片
自动化运维之CI/CD——持续集成与持续交付(1)_第15张图片

8.git clone

自动化运维之CI/CD——持续集成与持续交付(1)_第16张图片

自动化运维之CI/CD——持续集成与持续交付(1)_第17张图片

二、gitlab代码仓库

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 第一次登录需要强制修改密码

自动化运维之CI/CD——持续集成与持续交付(1)_第18张图片
安装完成后,查看状态,可以看到已经安装的组件。
自动化运维之CI/CD——持续集成与持续交付(1)_第19张图片
下图所示 官方给出的出示账号和密码:
自动化运维之CI/CD——持续集成与持续交付(1)_第20张图片
试用账号密码进入页面后,改密码:
自动化运维之CI/CD——持续集成与持续交付(1)_第21张图片
自动化运维之CI/CD——持续集成与持续交付(1)_第22张图片
加客户端SSH密钥(公钥),做免密登录:
自动化运维之CI/CD——持续集成与持续交付(1)_第23张图片
自动化运维之CI/CD——持续集成与持续交付(1)_第24张图片
创建项目:

自动化运维之CI/CD——持续集成与持续交付(1)_第25张图片
自动化运维之CI/CD——持续集成与持续交付(1)_第26张图片
自动化运维之CI/CD——持续集成与持续交付(1)_第27张图片
自动化运维之CI/CD——持续集成与持续交付(1)_第28张图片
上传文件到gitlab
添加——>提交——>上传

# echo www.westos.org > index.html
# git add index.html                            //添加
# git commit -m "add index.html"                //提交
# git push -uf origin main                      //上传

自动化运维之CI/CD——持续集成与持续交付(1)_第29张图片
自动化运维之CI/CD——持续集成与持续交付(1)_第30张图片

三、jenkins持续集成

jenkins就是一个整合工具,把代码从git或者其他代码托管平台拉取过来,然后通过脚本语言编写执行流程,达到了项目一键启动的目的

1.简介

Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。

Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。

CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。

自动化运维之CI/CD——持续集成与持续交付(1)_第31张图片
CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。
自动化运维之CI/CD——持续集成与持续交付(1)_第32张图片

2.jenkins安装

软件下载: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(此条命令可以多试几次,找一个对于你来说稳定的源)

自动化运维之CI/CD——持续集成与持续交付(1)_第33张图片

#测试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服务即可生效

3.访问jenkins

访问: http://172.25.254.3:8080

使用初始密码登录:cat /var/lib/jenkins/secrets/initialAdminPassword

安装默认插件即可,使用admin用户,登录后修改密码。

[root@server3 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
7178c9d7844144fca6b2c11df9eeb24f

将获取到的密码 输入 即可进入页面:
自动化运维之CI/CD——持续集成与持续交付(1)_第34张图片
进去以后安装推荐的插件即可:
自动化运维之CI/CD——持续集成与持续交付(1)_第35张图片
自动化运维之CI/CD——持续集成与持续交付(1)_第36张图片
自动化运维之CI/CD——持续集成与持续交付(1)_第37张图片
自动化运维之CI/CD——持续集成与持续交付(1)_第38张图片
然后修改密码:
自动化运维之CI/CD——持续集成与持续交付(1)_第39张图片
下载中文包:(参考博客:https://blog.csdn.net/qq_32352777/article/details/109267797)
自动化运维之CI/CD——持续集成与持续交付(1)_第40张图片

你可能感兴趣的:(jenkins)