CI/CD持续集成与持续交付(上)-------- git,gitee远程共有仓库和gitlab私有仓库,jenkins

Posted S4061222

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CI/CD持续集成与持续交付(上)-------- git,gitee远程共有仓库和gitlab私有仓库,jenkins相关的知识,希望对你有一定的参考价值。

目录

一、git工具使用

git简介

详细简介:https://blog.csdn.net/ThinkWon/article/details/94346816

Git理解

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

分布式版本控制系统

Git特点

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

Git 有三种状态:已提交(committed)、已修改(modified) 和 已暂存(staged)。

  • 已修改表示修改了文件,但还没保存到数据库中。
  • 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
  • 已提交表示数据已经安全地保存在本地数据库中。

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

Git工作流程

一般工作流程如下:

从远程仓库中克隆 Git 资源作为本地仓库;
从本地仓库中checkout代码然后进行代码修改;
在提交本地仓库前先将代码提交到暂存区;
提交修改,提交到本地仓库;本地仓库中保存修改的各个历史版本;
在需要和团队成员共享代码时,可以将修改代码push到远程仓库。

Git 的工作流程图如下:

Git的四个核心概念

工作区、暂存区、版本库、远程仓库
Workspace: 工作区,就是你平时存放项目代码的地方

Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

git使用

安装Git:


获取 Git 仓库:

  • 将尚未进行版本控制的本地目录转换为 Git 仓库。
  • 从其它服务器克隆 一个已存在的 Git 仓库。比如: git clone

初始化版本库:

demo目录初始化为git仓库,代码库.git,demo目录为工作区

mkdir demo
git init


纯文本文件会放在版本库!!!(如yaml文件,word不是纯文本文件)

创建测试文件,README.md,查看状态 ??,表示不在版本库中

将工作区文件README.md添加到暂存区,查看状态 A,表示此时已经在暂存区中

将暂存区的文件README.md提交,默认提交的是整个暂存区的数据,不只是刚才的文件,提交后在主分支中

第一次提交需要设置 用户名和邮箱!!!,重新提交,查看状态,此时提交成功

修改工作区的文件,查看状态,M为红色,靠右显示,M:已修改

检查当前文件状态
$ git status
$ git status -s		//简化输出


重新add添加到缓存区,查看状态,M为绿色,靠左显示,表示已经提交至暂存区

全部提交,此时使用update,查看全部提交后的状态,提交成功 !!!

文件中追加内容后查看,M为红色,靠右显示,M:已修改

checkout:撤销,再次查看文件内容,恢复到追加前状态

继续vim编辑md文件,查看状态为 M红色,靠右,重新add添加至缓存区,查看状态为 M绿色,靠左

再次追加内容至md文件中,此时查看状态,两个M颜色不同,左边绿色M表示:(1和2行的)已经提交暂存区,右边红色M表示:第三行内容在工作区,未提交至缓存区域

M(右)工作区,左(暂存区)

重新添加,查看状态,此时都已在缓存区中!!!

重置暂存区的指定文件,恢复文件至工作区状态,checkout:撤销,恢复文件至上次工作区文件内容

.gitconfig 查看配置信息可以看到设定的用户和邮箱信息

忽略隐藏文件

创建隐藏文件和目录:纯目录不会发现,目录里有文件才会关注


查看隐藏文件和目录的状态 ??

编辑.gitignore,.*表示忽略所有隐藏文件,/test:只忽略当前目录下的test文件 build/: 忽略任何目录下名为 build 的文件夹

md文件中追加内容,commit -a -m:两步和为一步,add+commit,查看状态,成功提交

git log 显示当前分支的版本历史

移除文件

(1)直接 rm 删除文件,使用 checkout 撤销,可恢复文件

此时是工作区删除,但是暂存库中未删除


(2)git rm 删除文件reset+checkout 可恢复文件

暂存区删除


(3)git rm + commit delete 删除文件,
版本库删除

git reflog 版本回退 ,git reset 指定版本,恢复文件

git命令补充

查看提交历史
$ git log
$ git log -p -2
$ git log --stat
$ git log --pretty=oneline
查看已暂存和未暂存的修改
$ git diff
重命名文件
$ git mv README.md README
gitlab-ctl start    		# 启动所有 gitlab 组件

gitlab-ctl stop        		# 停止所有 gitlab 组件

gitlab-ctl restart       	 	# 重启所有 gitlab 组件

gitlab-ctl status        		# 查看服务状态

gitlab-ctl reconfigure     	# 重载服务

gitlab-ctl tail        		# 查看日志

二、git结合远程共有仓库github/gitee

由此github登陆曼,此处是结合giitee

首先进行账户注册

登陆成功

ssh认证,生成本地密钥,并上传公钥到gitee远程共有仓库中


添加ssh公钥成功!!!

新建仓库为westos,指定westos仓库公开


创建成功

git init(本地已做过)

本地从仓库连接远程仓库,使用ssh方式(两种连接方式:ssh/http)使用https方式推送每次需要输入用户名和密码,如果不想麻烦的话采用ssh方式

push本地仓库内容至远程共有仓库,指定分支master

远程仓库中可以看到文件

本地删除文件,从远程仓库直接克隆,本地会恢复文件

本地编辑test文件,add -- commit -- push

成功上传至远程仓库

三、远程私仓库gitlab搭建

创建虚拟机server5,官方推荐至少4G内存

下载gitlab的安装包,gitlab.el8的python是3版本,官网:https://about.gitlab.com/install/

软件下载(官方下载慢,推荐使用国内镜像站点)
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/

安装依赖

安装rpm包

编辑配置文件, 指向自己本机 ip,访问gitlab的地址


gitlab-ctl reconfigure重载服务

登录gitlab, 首次登陆的初始密码


网页访问http://172.25.28.5


重置密码

修改语言

本地添加ssh密钥,将server5的公钥拷贝添加到仓库中


ssh方式认证成功!!!

创建项目

westos项目,选择私有,选择初始化会生成readme.md文件

查看项目

本地克隆

进入工作目录,查看本地git版本

gitlab-ctl status 查看服务状态

一 、jenkins持续集成

1 jenkins简介

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

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

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

  • CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。

2 jenkins安装

软件下载:https://jenkins.io/zh/download/

国内镜像站:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/

注意 jenkins 新版本有依赖性(daemonize)

安装jdk,再装jenkins

启动 jenkins

查看端口:8080

初始化的数据位置:/var/lib/jenkins

访问访问:172.25.28.6:8080

使用默认初始密码登陆,初始密码位于

cat /var/lib/jenkins/secrets/initialAdminPassword


此处注意是 All-None!!!

跳过并save,admin不用创建

重置密码和时区

重新登陆成功

更新插件源

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


给定权限

查看哪个镜像站的速度快

curl -sSL https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/speed-test.sh | bash

此处tsinghua 镜像最快!!!

在设置中找到Update Site,将快的url填入(本人无意填错)
ustc源
https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/updates/ustc/update-center.json


可以查看镜像源文件,已更改

cat /var/lib/jenkins/hudson.model.UpdateCenter.xml

3. jenkins插件安装

Dashboard 选择 Plugin Manager插件管理

点击available,搜索中文插件,点击install

安装插件成功

安装pipeline流水线插件

安装插件成功

4. jenkins项目创建,每隔1分钟看gitlab的变化

为项目配置git仓库,需要安装gitlab插件

新建freestyle类型的项目,名为westos


本机需要有git工具

配置名为westos的项目,在源码管理一栏添加私有git url
私有git路径:git@172.25.28.6:root/westos.git

报错原因:git仓库无法和Jenkins进行SSH免密连接


jenkins主机本地生成ssh密钥

上传到gitlab私有仓库中

添加凭证

凭证中添加私钥匙
报错解决!!!

构建触发器,测试论询:每隔1分钟看gitlab的变化

源码管理中,指定分支为main,与gitlab中分支一致!!!

应用,查看控制台输出,成功!!!

测试:

git端添加测试文件index.html,上传至gitlab仓库,察看是否同步


jenkins端查看数据已同步!!!


查看westos项目控制台输出

5.实时看gitlab的变化,gitlab自动触发jenkins

gitlab的设定:

首先打开git设置----网络----外发请求, 允许Webhooks和服务对本地网络的请求


在项目设置----Webhooks添加策略
url 和 token 的获取见于下面的jenkins中!!!

jenkins中的设定


取消轮询

url的获取:

token的获取:
应用!!!

测试:

本地仓库中编辑index.html 文件上传至 远程私有仓库 gitlab

jenkins端实现实时同步

查看jenkins的westos项目的控制台输出

6 jenkins自动构建镜像,并上传至本地仓库registry

本地git端编辑Dockerfile,定义拉取的测试镜像

push至远程私有仓库gitlab

jenkins端查看同步后的Dockerfile

jenkins端需要安docker

启动docker服务

网桥配置


准备好Dockerfile文件中需要的镜像

安装插件

jenkins临时i搭建私有仓库registry

sock连接docker plusgins,jenkins对sock无权限,需要修改sock权限

配置项目westos,按图中要求即可

取消强制pull

查看jenkins端的控制台输出

上传镜像至本地临时仓库registry成功!!!

测试:
本地直接localhost访问,查看到已经上传的镜像

7. jenkins自动构建镜像,并上传至harbor仓库

本地git端和jenkins端主机都添加harbor仓库解析

启动harbor仓库

保证jenkins端接入harbor仓库


测试pull拉取成功

配置项目westos,按图中要求即可

指定上传至 reg.westos.org仓库的 library/demo

sock连接docker plusgins,jenkins对sock无权限,需要修改sock权限
CI/CD持续集成与持续交付(上)-------- git,gitee远程共有仓库和gitlab私有仓库,jenkins

CI / CD /CD 持续集成 持续交付 持续部署

CICD - 持续集成与持续交付

CI/CD持续集成与持续交付(下)-------- jenkins的节点管理,用户管理,结合ansible和k8s

CI/CD持续集成与持续交付(下)-------- jenkins的节点管理,用户管理,结合ansible和k8s

3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站