Skip to main content

Pywhio

官方 @ PywhiO. Python大数据, AI技术, 微服务, DRF+REACT前后端分离实践.

2 min read · March 1st 2020 (originally published at pywhio)

CICD Mini Project

阅读:-


GitLab的功能虽然很简单,但是要快速的部署并不容易,所以这里我们通过一个小型的实验来展示,相关自动化过程中的原理。通过这个过程,读者可以理解CI CD工具的强大性,以及在大数据项目中的价值。

1.1 gitlab ci的简单测试

虽然Gitlab功能看起来很简单,但是在一个项目中想把他部署好却并不容易,所以我们计划做一个详细的实验,来验证一下相关组件的应用。

1.1.1 测试环境概述

1583069250520

​ 图 1-8-1 测试环境概述

从上图可见,本次的测试中,应用两台虚拟机服务器,其中:

1.harbor:采用容器化方式部署,部署在服务器192.168.223.132中。主要负责完成镜像仓库的功能。

2.Gitlab-runner:采用直接部署在宿主机的方式,部署在服务器192.168.223.132上。主要负责完成从代码到镜像的转换功能。

3.Gitlab-ce:采用容器化的部署方式,部署在第二台服务器192.168.223.134上,主要负责代码库的管理功能。

1.1.2 所需服务的准备

1.1.2.1 部署gitlab服务

  1. 在ip地址为192.168.223.134的测试机中下载最新版本的gitlab-ce镜像docker pull gitlab ,拉取镜像完毕后,在本地通过指令docker image ls查看该镜像:

1583069323634

  1. 在本机准备gitlab的工作目录

mkdir -p /home/gitlab/config 创建config目录

mkdir -p /home/gitlab/logs 创建logs目录

mkdir -p /home/gitlab/data 创建data目录

  1. 启动gitlab容器,运行指令:

docker run —detach \

​ —hostname 192.168.223.134 \

​ —publish 7001:443 —publish 80:80 —publish 7003:22 \

​ —name gitlab —restart always \

​ —volume /home/gitlab/config:/etc/gitlab \

​ —volume /home/gitlab/logs:/var/log/gitlab \

​ —volume /home/gitlab/data:/var/opt/gitlab 719e7e45b1e2

参数名称参数说明
detach指定容器运行于前台还是后台
hostname指定主机地址,如果有域名可以指向域名
publish指定容器暴露的端口,左边的端口代表宿主机的端口,右边的是代表容器的端口
name给容器起一个名字
restart always总是重启
volume数据卷,将容器内部的文件夹挂载到本地
719e7e45b1e2镜像id

在这个配置的过程中,有一个重点是相关的port的映射处理,因为容器是一个虚拟环境,所以必须做好的port的映射管理。

1583069451835

图 1-8-2 初始的Gitlab CE的端口配置

下面将端口的作用进行说明:

在容器内:其中80是http服务,443是https服务, 22是ssh服务;

在宿主机上:其中80是http服务,7001是https服务,7003是ssh服务;

  1. 修改gitlab.rb配置文件,按上面的方式,gitlab容器运行没问题,但在gitlab上创建项目的时候,生成项目的URL访问地址是按容器的hostname来生成的,也就是容器的id。作为gitlab服务器,我们需要一个固定的URL访问地址,于是需要配置gitlab.rb(宿主机路径:/home/gitlab/config/gitlab.rb)配置有三个参数如:

external_url ’http://192.168.223.134

gitlab_rails[‘gitlab_ssh_host’] = ‘192.168.223.134’

gitlab_rails[‘gitlab_shell_ssh_port’] = 7003

备注1: 默认情况是没有这个配置,只有增加这个配置,才能实现通过ip地址的方式来访问gitlab容器。

1583069501581

  1. 进入gitlab容器重启服务器是配置生效,

进入gitlab容器 docker exec -it gitlab /bin/bash

重新导入gitlab配置信息 gitlab-ctl reconfigure

重启gitlab服务 gitlab-ctl restart

  1. 检查启动信息 docker ps

    1583069514145

浏览器访问http://192.168.223.134/,出现gitlab登录界面,gitlab服务成功部署。相关外部用户是通过80端口来访问的gitlab的网页服务。

1583069530231

1.1.2.2 部署gitlab-runner服务

  1. 在ip地址为192.168.223.132的测试机中安装gitlab-runner服务(宿主机直接安装的方式)

sudo apt-get install gitlab-ci-multi-runner

  1. gitlab-runner注册,首先获取gitlab-ci的token和url,获取方式:

项目主页 -> Settings -> CI/CD -> Runners Expand

1583069600046

  1. 使用命令注册gitlab-runner:

gitlab-runner register

需要按步骤进行

1) 输入gitlab的服务URL(http://192.168.223.132 使用80端口)

2) 输入gitlab-ci的Toekn

3) 关于集成服务中对于这个runner的描述

4) 给这个gitlab-runner输入一个标记,这个tag非常重要,在后续的使用过程中需要使用这个tag来指定gitlab-runner

5) 是否运行在没有tag的build上面。在配置gitlab-ci的时候,会有很多job,每个job可以通过tags属性来选择runner。true表示如果job没有配置tags,也执行

6) 是否锁定runner到当前项目

7) 选择执行器,gitlab-runner实现了很多执行器,可用在不同场景中运行构建,详情可见GitLab Runner Executors,这里选用Shell模式

  1. runner注册成功后,查看runner列表:

gitlab-ci-multi-runner list

1583069631247

查看runner运行状态:

gitlab-ci-multi-runner status

1583069643454

刷新浏览器runner注册页面,可以看到一个新增的runner:

1583069656878

5.在项目添加 .gitlab-ci.yml文件:

1583069671107

本项目的stages包含三个部分:build、deploy、check,具体内容如下:

build: 首先登陆私有镜像仓库harbor服务器,然后制作镜像,最后将制作的镜像推送到harbor仓库中

deploy:在本地查看制作的镜像

check:运行制作的镜像服务

1.8.2.3部署harbor服务

  1. 首先安装harbor的依赖

安装docker

apt install docker

systemctl enable docker

systemctl restart docker

安装 docker-compose

pip install docker-compose

  1. 下载harbor

官网下载harbor的离线安装包,下载最新版本的harbor

下载地址:https://github.com/goharbor/harbor/releases

1583069708067

  1. 下载完毕后对安装包进行解压

tar zxvf harbor-offline-installer-v1.9.4.tgz

解压完毕后,生成harbor文件夹,harbor.yml就是harbor的配置文件

1583069797640

修改配置信息访问的ip地址为本机ip地址

1583069811374

  1. 修改完配置文件后,在当前目录执行./install.sh启动harbor,harbor服务就会根据当期目录下的docker-compose.yml开始下载依赖的镜像,检测并按照顺序依次启动各个服务

    1583069835534

    1583069853688

#后续可以使用docker-compose [start|stop] 命令在docker-compose.yml文件所在目录下来关闭和启动harbor

docker-compose stop 关闭harbor

1583069870535

docker-compose start 启动harbor

1583069883546

docker ps 查看harbor运行状态

1583069894116

  1. 访问harbor

在浏览器访问我们设置的hostname 192.168.223.132

1583069912783

账号密码为配置信息中默认的admin,Harbor12345

1583069923982

点击登录

1583069934875

默认安装后会自动创建一个名称为library的项目,且访问级别为公开(表示任何人可读,即任何人都可以下载该项目中的镜像)

\6. 命令行登录

harbor也可以在命令行下进行登录,登录后可以将本地的镜像上传到harbor,也可以下载用户拥有权限项目下的镜像,需要注意的是上传镜像的格式(docker tag image:tag harbor-address/project name/image:tag)

1583069975519

第一次登录后报错,解决办法,在配置文件/etc/docker/daemon.json添加信任的主机ip

1583069986225

修改配置信息后,重新导入配置信息,重启docker服务

systemctl daemon-reload

systemctl restart docker

再次登录

1583070013671

1.1.3 测试过程

  1. 在ip地址为192.168.223.132的测试机中准备本次测试的项目脚本,具体项目结构如下:

1583070042582

dockerfile内容如下:

1583070056029

function.py内容如下:

1583070068252

  1. 设置git的ssh免密登录

创建ssh免密登录的.ssh文件,一直按回车就行

ssh-keygen -t rsa -C “841574470@qq.com”

创建之后,切换到.ssh文件夹,拷贝公钥

1583070097869

在gitlab-> User Settings ->SSH Key中,将拷贝的公钥粘贴进去,点击Add Key

1583070114888

添加成功后的公钥:

1583070126308

  1. 切换到项目目录make_dir,设置git的全局配置:

git config —global user.name “python”

git config —global user.email “841574470@qq.com”

克隆git服务器上的项目到本地

git clone ssh://git@192.168.223.134:7003/python/make_dir.git

添加本地代码到暂存区

git add .

为本次提交添加备注信息

git commit -m “test”

将暂存区的代码推送到git服务器中

git push -u origin master

  1. 项目代码更新触发gitlab-ci

1583070145685

点击run pipeline查看pipeline

1583070155592

点击jobs可以查看每一步job执行的详细信息

build:

1583070173792

deploy:

1583070185394

check:

1583070198630

  1. 测试结果核查

在本地查看gitlab-ci过程中runner制作的镜像:

1583070301076

在harbor仓库查看镜像的更新时间

1583070325977

ps:关于镜像的路径,点击上图中的pull命令,就可以复制拉取镜像的命令,然后粘贴就可以拉取镜像了

查看容器的运行情况

1583070341846

1.8.4 部署服务路由整理

1583070350763

1.8.5 总结

1583070362731

以上是GITlab CI CD的核心过程,其中由于容器外的组件需要和部署在容器中的组件进行通信,所以在配置上存在一定的困难,解决好这个问题以后,就可以很方便的使用相关的功能。非常优雅的实现自动化原理。

1583070375487

分享到微博

Previous

如何基于Gitlab对大数据项目持续集成
Starter
MicroServ
Tutorials
Blog