1. 认识CICD
1.1 什么是CICD?
参考:https://blog.csdn.net/duanlei123456/article/details/87454053、https://www.redhat.com/zh/topics/devops/what-is-ci-cd
- CI(持续集成):持续集成强调对于开发人员的每个提交,立刻进行构建、扫描、(单元)测试。根据结果,我们可以确定新代码和原有代码能否正确地集成在一起。
- CD(持续交付):持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」中进行更多的测试来更早地发现问题。比如,我们完成单元测试后,可以把代码部署到QA环境,预生产,中更多的自动化集成测试。如果代码没有问题,可以继续手动部署到生产环境中。持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的
- CD(持续部署):持续部署则是在持续交付的基础上,把部署到生产环境的过程自动化,发布条件:团队成员确认预发布环境验证通过,进入发布阶段。
1.2 流程图分析
1.3 Gitlab实现CI流程图
2. 具体配置
2.1 环境搭建
服务器分配
主机名 | IP地址 | 角色 | 内存和处理器 |
---|---|---|---|
localrepo.io | 192.168.58.11 | yum本地库、harbor库、nexus库、jdk8 | 3G 4处理器 |
centos8-12 | 192.168.58.12 | gitlab-ce、sonarqube、postgresql11、jdk11 | 3G 4处理器 |
centos8-13 | 192.168.58.13 | gitlab-runner、sonar-scanner、maven3.6 | 3G 4处理器 |
软件版本
- 操作系统:Centos8.2
- Harbor:2.4.1
- Nexus:3.37.1
- Docker:20.10.12
- Docker-Compose:1.27.3
- GitLab-CE:14.5.2
- GitLab-Runner:14.5.2
- SonarQube:8.9.1
- Postgresql:13.5
- Maven:3.6.3
- JDK:8、11
2.2 系统初始化
2.2.1 设置主机名和hosts映射关系
```shell设置主机名
sudo hostnamectl set-hostname localrepo.io sudo hostnamectl set-hostname centos8-12 sudo hostnamectl set-hostname centos8-13
设置hosts文件
sudo sh -c ‘cat >> /etc/hosts <<EOF 192.168.58.11 localrepo.io 192.168.58.12 centos8-12 192.168.58.13 centos8-13 EOF’
<a name="wbCqL"></a>
### 2.2.2 关闭防火墙和selinux
```shell
# 关闭 selinux
sudo setenforce 0
sudo sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# 关闭防火墙
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
2.2.3 开启IP转发功能
修改内核参数,开启 IP 转发功能,开启 Bridge filter,避免由于绕过 iptables 而导致流量无法正确路由的问题。
sudo sh -c 'cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
EOF'
sudo sysctl --system
3. 配置yum本地库(可不做)
3.1 服务器配置
yum本地库:简单来说,就是把一些常用的软件依赖下载到某个服务器上,其他服务器就可以从这个 yum库 服务器上下载,而不通过网络。
3.1.1 通用配置
1、在服务器根目录创建 /CentOS8 或者 /CentOS7 作为 yum 仓库的根目录。
2、配置 yum 源的方式下载相关软件包,以 Docker 为例。
# 配置 Docker-CE 的 yum 源
sudo sh -c 'cat > /etc/yum.repos.d/Docker-CE.repo <<EOF
[Docker-CE]
name=Docker CE Stable
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF'
# centos8:同步在线 Docker-CE 仓库的软件包文件至本地
sudo dnf reposync --repoid=Docker-CE --download-metadata -p /CentOS8
# centos7:需要用到这个插件yum-utils
yum install yum-utils
sudo reposync --repoid=Docker-CE --download-metadata -p /CentOS7
3、直接将其他软件包放到 /CentOS8 或者 /CentOS7 目录下,可以使用 curl 下载,也可以在 windows 下载好放进去。
# 下载Docker-Compose
sudo curl -L https://github.com/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m) \ -o /CentOS7/Harbor/docker-compose
# 下载 Harbor 安装包
sudo curl -L https://github.com/goharbor/harbor/releases/download/v2.1.0/harbor-offline-installer-v2.1.0.tgz \ -o /CentOS7/Harbor/harbor-offline-installer-v2.1.0.tgz
3.1.2 Centos8服务器配置
1、挂载镜像到 /CentOS8 目录,并复制软件包 APPStream 和 BaseOS(这是 Centos8 独有的)。
# 挂载光盘镜像
sudo mount /dev/sr0 /media
# 复制软件包 AppStream 和 BaseOS
sudo cp -r /media/BaseOS /CentOS8
sudo cp -r /media/AppStream /CentOS8
# 卸载光盘镜像
sudo umount /dev/sr0
2、移动到 /etc/yum.repo.d/ 目录下,新建文件夹 old/,将所有的 *.repo 文件放到 old 文件夹下。
3、在 /etc/yum.repo.d/ 目录下新建文件 local.repo。
sudo /etc/yum.repo.d/local.repo
# 文件内容如下
[AppStream]
name=CentOS8-AppStream
baseurl=http://localrepo.io/AppStream/
baseurl=file:///CentOS8/AppStream/
gpgcheck=0
enabled=1
[BaseOS]
name=CentOS8-Base
baseurl=http://localrepo.io/BaseOS/
baseurl=file:///CentOS8/BaseOS/
gpgcheck=0
enabled=1
[Docker-CE]
name=Docker-CE
baseurl=http://localrepo.io/Docker-CE/
baseurl=file:///CentOS8/Docker-CE/
gpgcheck=0
enabled=1
4、查看仓库并清空缓存。
yum repolist
yum clean all
3.1.3 Centos7服务器配置
1、将 Centos7.8.xxx.iso 放到根目录下,执行挂载命令,挂载到 /mnt/cdron/ 目录下。
mount -o loop -t iso9660 /CentOS-7-x86_64-DVD-2003.iso /mnt/cdron/
2、将 /mnt/cdron/ 目录下的所有内容拷贝到 /CentOS7/cdron/ 目录下,并解除挂载。
cp -rv /mnt/cdron/* /CentOS7/cdron/
umount /mnt/cdron/
3、移动到 /etc/yum.repo.d/ 目录下,新建文件夹 old/,将所有的 *.repo 文件放到 old 文件夹下。
4、在 /etc/yum.repo.d/ 目录下新建文件 local.repo。
sudo /etc/yum.repo.d/local.repo
# 文件内容如下
[local]
name=CentOS-$releasever - Base
baseurl=http://localrepo.io/cdrom/
baseurl=file:///CentOS7/cdrom
gpgcheck=0
enabled=1
[Docker-CE]
name=Docker-CE
baseurl=http://localrepo.io/Docker-CE/
baseurl=file:///CentOS7/Docker-CE/
gpgcheck=0
enabled=1
5、这里需要注意,Centos7 是没有 AppStream 和 BaseOS 这个源仓库的,我们可以同步阿里云仓库到本地复制到 /CentOS7/ 目录下(大概 30G),也可以将所需要下载的 rpm 包的相关依赖放到 /CentOS7/ 目录下。
同步阿里云仓库到本地
# 1、在一台没有任何配置的机器上操作,必须有网。可以参考:https://www.its203.com/article/yuanfangPOET/107825360
# 2、下载所需的插件
yum install createrepo reposync yum-utils -y
# 3、移除本地repo文件
mv *.repo old/
# 4、下载阿里云镜像到/etc/yum.repo.d/目录下。
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 5、生成缓存
yum clean all #清除之前的yum源缓存
yum makecache #创建缓存
yum repolist #查看当前可用的YUM源
# 6、同步镜像到本地,我这里下载到/opt/yum/目录,需要先到该目录下。reposync将根据刚下载的repo下载rpm包到指定文件夹
cd /opt/aliyun/
reposync -r base
reposync -r extras
reposync -r updates
reposync -r epel
# 7、将下载的完整的aliyun目录放到/CentOS7/下,并删除掉下载的阿里云的*.repo文件。
# 8、进入/CentOS7/aliyun/目录下,有四个文件夹:base、extras、updates、epel,在每个文件夹下执行下列命令,会生成repodata目录
createrepo ./
# 9、在/etc/yum.repo.d/中进行配置
[aliyun-base]
name=aliyun-base
baseurl=http://localrepo.io/aliyun/base/
baseurl=file:///CentOS7/aliyun/base/
gpgcheck=0
enabled=1
[aliyun-extras]
name=aliyun-extras
baseurl=http://localrepo.io/aliyun/extras/
baseurl=file:///CentOS7/aliyun/extras/
gpgcheck=0
enabled=1
[aliyun-updates]
name=aliyun-updates
baseurl=http://localrepo.io/aliyun/updates/
baseurl=file:///CentOS7/aliyun/updates/
gpgcheck=0
enabled=1
# 10、大功告成,清空缓存并查看yum仓库列表
yum repolist
yum clean all
下载 RPM 包及其相关依赖到 yum 库
# 1、在/CentOS7/目录下创建目录aliyun,并在aliyun目录下创建四个文件夹:base、epel、extras、updates,用来存放相关依赖包
# 2、在一台没有任何配置的机器上操作,必须有网
# 3、下载所需的插件
yum install createrepo reposync yum-utils -y
# 4、下载阿里云镜像到/etc/yum.repo.d/目录下。
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 5、下载docker及其相关依赖到本地,downloaddir指的是下载的路径,我这里在aliyun目录里新建了四个文件夹:base、epel、extras、updates
yum install --downloadonly --downloaddir=/opt/aliyun http://localrepo.io/Docker-CE/Packages/containerd.io-1.4.12-3.1.el7.x86_64.rpm
yum install --downloadonly --downloaddir=/opt/aliyun http://localrepo.io/Docker-CE/Packages/docker-ce-20.10.12-3.el7.x86_64.rpm http://localrepo.io/Docker-CE/Packages/docker-ce-cli-20.10.12-3.el7.x86_64.rpm
# 6、将下载过程中所需要用到其他依赖包放到对应的目录下,比如这个依赖是base包下就放到/opt/aliyun/base文件夹里。
# 7、对所有需要安装的rpm包进行上面的下载,并将依赖包放到对应目录。
# 8、待所需软件依赖包全部下载完毕,将aliyun整个目录拷贝到/CentOS7/目录下。
# 9、进入/CentOS7/aliyun目录,里面应该有四个文件夹:base、epel、extras、updates,进入每个目录执行下列命令生成repodata目录。
createrepo ./
# 10、在/etc/yum.repo.d/中进行配置
[aliyun-base]
name=aliyun-base
baseurl=http://localrepo.io/aliyun/base/
baseurl=file:///CentOS7/aliyun/base/
gpgcheck=0
enabled=1
[aliyun-extras]
name=aliyun-extras
baseurl=http://localrepo.io/aliyun/extras/
baseurl=file:///CentOS7/aliyun/extras/
gpgcheck=0
enabled=1
[aliyun-updates]
name=aliyun-updates
baseurl=http://localrepo.io/aliyun/updates/
baseurl=file:///CentOS7/aliyun/updates/
gpgcheck=0
enabled=1
# 11、大功告成,清空缓存并查看yum仓库列表
yum repolist
yum clean all
3.2 客户端配置
1、设置主机名,设置 hostname 解析,配置和 yum 本地库映射关系。
# 设置主机名
sudo hostnamectl set-hostname centos7-45
# 设置映射关系
192.168.58.50 localrepo.io
192.168.58.45 centos7-45
2、移除本地 repo 文件,并新建 local.repo。
sudo mkdir /etc/yum.repos.d/old
sudo mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/old/
sudo vi /etc/yum.repos.d/local.repo
[local]
name=CentOS-$releasever - Base
baseurl=http://localrepo.io/cdrom/
gpgcheck=0
enabled=1
[Docker-CE]
name=Docker-CE
baseurl=http://localrepo.io/Docker-CE/
gpgcheck=0
enabled=1
[aliyun-base]
name=aliyun-base
baseurl=http://localrepo.io/aliyun/base/
gpgcheck=0
enabled=1
[aliyun-extras]
name=aliyun-extras
baseurl=http://localrepo.io/aliyun/extras/
gpgcheck=0
enabled=1
[aliyun-updates]
name=aliyun-updates
baseurl=http://localrepo.io/aliyun/updates/
gpgcheck=0
enabled=1
3、清空缓存并查看 yum 仓库列表。
yum repolist
yum clean all
4、下载 yum 库上的软件。
# 通用
yum install -y http://localrepo.io/Docker-CE/Packages/containerd.io-1.4.12-3.1.el7.x86_64.rpm
# curl下载
curl -L http://localrepo.io/Harbor/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
3.3 Nginx配置
配置完 yum 本地库需要配置 nginx 进行页面展示。
1、下载所需环境的依赖和插件。
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
2、如果配置了阿里云仓库,可以直接下载,否则需要将 nginx 最新包放到 /opt/ 目录下手动安装。
# 下载nginx,如果可以,就不执行下面操作。
yum install nginx
# 1、解压缩nginx,并进入nginx目录。
# 2、使用默认配置
./configure
# 3、编译安装,安装路径:/usr/local/nginx
make && make install
3、修改 nginx 配置文件,如果需要修改端口,直接将 80 改为 82 就行。
sudo vi /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
location / {
root /CentOS7;
index index.html index.htm;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
4、设置 nginx 开启自启。
# 设置开机自启:
sudo vi /etc/rc.local
#增加一行
/usr/local/nginx/sbin/nginx
# 给与权限
sudo chmod 755 /etc/rc.local
5、启动 nginx。
cd /usr/local/nginx/sbin/
./nginx
6、这样,就可以在页面 192.168.58.50 上看到配置好的 yum 仓库了。