Bootstrap

CI/CD 持续集成与持续交付

CICD是什么

CI/CD 是指持续集成(Continuous Integration)和持续部署(Continuous Deployment)或持续交付(Continuous Delivery)

持续集成(Continuous Integration)

持续集成是一种软件开发实践,团队成员频繁地将他们的工作集成到共享的代码仓库中。其主要特点包括:

1. 频繁提交代码:开发人员可以每天多次提交代码,确保代码库始终保持最新状态。
2. 自动化构建:每次提交后,自动触发构建过程,包括编译、测试、静态分析等。
3. 快速反馈:如果构建失败或测试不通过,能够快速地向开发人员提供反馈,以便及时修复问题。

持续部署(Continuous Deployment)

持续部署是在持续集成的基础上,将通过所有测试的代码自动部署到生产环境中。其特点如下:

1. 自动化流程:从代码提交到生产环境的部署完全自动化,无需人工干预。
2. 高频率部署:可以实现频繁的部署,使得新功能能够快速地提供给用户。
3. 风险控制:需要有强大的测试和监控体系来确保部署的稳定性和可靠性。
 

持续交付(Continuous Delivery)

持续交付与持续部署类似,但不一定自动部署到生产环境,而是随时可以部署。其重点在于确保软件随时处于可发布状态。

CI/CD 的好处包括:

1. 提高开发效率:减少手动操作和等待时间,加快开发周期。
2. 尽早发现问题:通过频繁的集成和测试,问题能够在早期被发现和解决。
3. 降低风险:减少了大规模部署时可能出现的问题,提高了软件的质量和稳定性。

4. 增强团队协作:促进团队成员之间的沟通和协作,提高团队的整体效率。

常见的 CI/CD 工具包括 Jenkins、GitLab CI/CD、Travis CI 等。这些工具可以帮助团队实现自动化的构建、测试和部署流程。

git工具使用

git简介

Git 是一个分布式版本控制系统,被广泛用于软件开发中,以管理代码的版本和变更。
主要特点:

分布式
 每个开发者都有完整的代码仓库副本,这使得开发者可以在离线状态下进行工作,并且在网络出现问题时也不会影响开发。
即使中央服务器出现故障,开发者仍然可以在本地进行开发和查看项目历史。
高效的分支管理
  Git 中的分支创建和切换非常快速和简单。开发人员可以轻松地创建新的分支来进行新功能的开发或修复 bug,而不会影响主分支。
 合并分支也相对容易,可以使用多种合并策略来满足不同的需求。
 快速的版本回退
如果发现某个版本存在问题,可以快速回退到之前的版本。
 可以查看每个版本的详细变更记录,方便了解代码的演进过程。
强大的提交管理
每个提交可以包含详细的提交信息,描述本次提交的更改内容。
 支持协作开发

开发者可以将自己的更改推送到远程仓库,供其他开发者拉取和合并。
可以处理多个开发者同时对同一文件进行修改的情况,通过合并冲突解决机制来确保代码的完整性。

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

git工作流程

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

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

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

部署

安装git

在rhel9的系统中默认自带git

dnf install git -y

设定命令补全功能

echo "source  /usr/share/bash-completion/completions/git" >> ~/.bashrc
 source  ~/.bashrc

初始化

获取 Git 仓库通常有两种方式:

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

初始化版本库

设定用户信息

git config --global user.name "timinglee"
 git config --global user.email "[email protected]"

查看当前文件状态

注意: .git目录是git跟踪管理版本库的,没事别瞎溜达

git使用方法

常用方法

 git status -s
?? README.md					#??	新建文件未添加到版本库

 git status  -s
A  README.md					#A 已添加到暂存区

提交暂存区数据

git commit -m "add README.md"

再次修改

#右M 表示文件在工作区被修改

撤销修改

 git checkout -- README.md

从新修改

#左M表示文件已经在版本库中并被跟踪,

从暂存区撤销

git restore --staged README.md

从新提交

git add README.md

更新

git commit -m "update v1"

更新文件

echo timinglee >> README.md
 git add README.md
echo timinglee >> README.md


#MM表示有一部分在暂存区,还有一部分没有提交

#MM表示有一部分在暂存区,还有一部分没有提交

如果现在提交只能提交在暂存区中的部分

查看已暂存和未暂存的修改变化

跳过使用暂存区,只能在提交过的在版本库中存在的文件使用如果文件状态是“??”不能用此方法

撤销工作区中删除动作

从版本库中删除文件

恢复从版本库中被删除的文件

查看日志操作

git log

查看提交动作

git reflog

版本回退到删除之前

git reset --hard

git对于文件如何忽略

[root@gitlab timinglee]# mkdir dir1/
[root@gitlab timinglee]# touch dir1/.file2
[root@gitlab timinglee]# git status -s

gitlab代码仓库

gitlab简介

GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。
 GitLab 具有很多功能,比如代码托管、持续集成和持续部署(CI/CD)、问题跟踪、合并请求管理等。它可以帮助开发团队更好地协作开发软件项目,提高开发效率和代码质量。

官网:https://about.gitlab.com/install/

中文站点: https://gitlab.cn/install/

官方包地址:https://packages.gitlab.com/gitlab/gitlab-ce

gitlab 的部署实施

部署gitlab需要内存大于4G

在安装包之前需配置好软件仓库来解决依赖性

yum install -y curl policycoreutils-python openssh-server perl
dnf install gitlab-ce-17.1.6-ce.0.el9.x86_64.rpm -y
配置gitlab

修改配置文件

cd /etc/gitlab
vim gitlab.rb

修改配置文件后需利用gitlab-crt来生效

gitlab-ctl reconfigure

执行命令成功后会把所有组件全部启动起来

登陆gitlab

用户名默认为 `root` 。如果在安装过程中指定了初始密码,则用初始密码登录,如果未指定密码,则系统会随机生成一个密码并存储在 `/etc/gitlab/initial_root_password` 文件中, 查看随机密码并使用 `root` 用户名登录。


注意:出于安全原因,24 小时后,`/etc/gitlab/initial_root_password` 会被第一次 `gitlab-ctl reconfigure` 自动删除,因此若使用随机密码登录,建议安装成功初始登录成功之后,立即修改初始密码

查看原始密码

cat /etc/gitlab/initial_root_password

登陆

设置语言

设置密码

 在gitlab中新建项目

生成sshd密钥

ssh-keygen
cat .ssh/id_rsa.pub

上传公钥到gitlab中

下载项目

git clone  [email protected]:root/timinglee.git

文件提交

查看

 jenkins

jenkins 简介

Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行
 

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

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

部署 jenkins

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

jenkins需要部署在新的虚拟机中

建议最少4G内存,4核心cpu

安装依赖包

yum install fontconfig java-17-openjdk git

安装jenkins

dnf install jenkins-2.462.2-1.1.noarch.rpm -y

启动jenkins

systemctl enable --now jenkins.service

查看原始密码

cat /var/lib/jenkins/secrets/initialAdminPassword

部署插件

建议修改admin的密码,在admin的设置中修改即可

 jenkins 与gitlab的整合

这个错误的原因是因为本机没有gitlab上的sshkey

把此密钥添加到gitlab上即可

添加密钥凭据

vim /etc/ssh/ssh_config
Host *
    StrictHostKeyChecking no

让jenkins每分钟查看gitlab 有没有更新

;