1. 认识CICD

1.1 什么是CICD?

参考:https://blog.csdn.net/duanlei123456/article/details/87454053https://www.redhat.com/zh/topics/devops/what-is-ci-cd

  • CI(持续集成):持续集成强调对于开发人员的每个提交,立刻进行构建、扫描、(单元)测试。根据结果,我们可以确定新代码和原有代码能否正确地集成在一起。
  • CD(持续交付):持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」中进行更多的测试来更早地发现问题。比如,我们完成单元测试后,可以把代码部署到QA环境,预生产,中更多的自动化集成测试。如果代码没有问题,可以继续手动部署到生产环境中。持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的
  • CD(持续部署):持续部署则是在持续交付的基础上,把部署到生产环境的过程自动化,发布条件:团队成员确认预发布环境验证通过,进入发布阶段。

    1.2 流程图分析

    image.png

    1.3 Gitlab实现CI流程图

    image.png

    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’

  1. <a name="wbCqL"></a>
  2. ### 2.2.2 关闭防火墙和selinux
  3. ```shell
  4. # 关闭 selinux
  5. sudo setenforce 0
  6. sudo sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
  7. # 关闭防火墙
  8. sudo systemctl stop firewalld.service
  9. sudo systemctl disable firewalld.service

2.2.3 开启IP转发功能

修改内核参数,开启 IP 转发功能,开启 Bridge filter,避免由于绕过 iptables 而导致流量无法正确路由的问题。

  1. sudo sh -c 'cat >> /etc/sysctl.conf <<EOF
  2. net.ipv4.ip_forward=1
  3. net.bridge.bridge-nf-call-iptables=1
  4. net.bridge.bridge-nf-call-ip6tables=1
  5. EOF'
  6. 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 仓库了。
image.png