首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Gitlab CI 搭建持续集成环境实现Docker自动化部署使用Harbor镜像仓库

Gitlab CI 搭建持续集成环境实现Docker自动化部署使用Harbor镜像仓库

作者头像
小东啊
发布2019-06-26 15:16:43
发布2019-06-26 15:16:43
4.3K00
代码可运行
举报
文章被收录于专栏:李浩东的博客李浩东的博客
运行总次数:0
代码可运行

本文简单介绍了持续集成的概念并着重介绍了如何基于 Gitlab CI 快速构建持续集成环境以及使用Docker实现自动化部署,主要介绍了 Gitlab CI 的基本功能和入门操作流程

以Ubuntu16.04.4++Gitlab CI+Docker自动化部署SptingBoot项目+搭建Harbor镜像仓库

一. 概念

持续集成(Continuous Integration,简称CI)指的是,频繁地(一天多次)将代码集成到主干。持续集成的好处主要有两个:

  • 1.快速发现错误 每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易
  • 2.防止分支大幅偏离主干 如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。

二. 开始搭建

1.依赖包安装

代码语言:javascript
代码运行次数:0
运行
复制
sudo apt-get updatesudo apt-get install -y curl openssh-server ca-certificates

执行完成后,邮件配置时选择Internet即可.

2.GitLab安装

2.1官方教程

如果按照官方安装方法, 直接运行下列命令即可.

代码语言:javascript
代码运行次数:0
运行
复制
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bashsudo apt-get install gitlab-ce

但按照官方教程安装会非常慢, 推荐使用下列方式, 利用清华源安装.

2.2清华源(推荐)

首先信任GitLab的GPG公钥

代码语言:javascript
代码运行次数:0
运行
复制
curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null

接下来打开gitlab-ce.list文本

代码语言:javascript
代码运行次数:0
运行
复制
sudo vim /etc/apt/sources.list.d/gitlab-ce.list

然后写入如下内容

代码语言:javascript
代码运行次数:0
运行
复制
deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu xenial main

最后:wq保存退出. 文本写入成功之后, 执行下列命令安装GitLab.

代码语言:javascript
代码运行次数:0
运行
复制
sudo apt-get updatesudo apt-get install gitlab-ce

出现以上界面说明安装成功

3.GitLab启动

安装完成之后启动GitLab

代码语言:javascript
代码运行次数:0
运行
复制
sudo gitlab-ctl reconfigure

打开sshd和postfix服务

代码语言:javascript
代码运行次数:0
运行
复制
service sshd startservice postfix start

最后输入下列命令, 检查GitLab是否成功运行.

代码语言:javascript
代码运行次数:0
运行
复制
sudo gitlab-ctl status

4.GitLab配置

4.1更改服务器IP地址

找到下列内容 我这边默认使用80端口 所以我只修改了external_url改为自己服务器地址

代码语言:javascript
代码运行次数:0
运行
复制
vim /etc/gitlab/gitlab.rbexternal_url http://192.168.201.170改为服务器的公网external_url http://你的ipnginx[listen_port] = 9091 #默认值即80端口 nginx[listen_port] = nilunicorn[port] = 9092#原值unicorn[port] = 8080

注意不要用8082,9090 端口,因为自带工具会用到

修改完后重新启动服务

代码语言:javascript
代码运行次数:0
运行
复制
gitlab-ctl reconfigure

检查是否正确运行

代码语言:javascript
代码运行次数:0
运行
复制
sudo gitlab-ctl status

gitlab的管理

代码语言:javascript
代码运行次数:0
运行
复制
关闭gitlab: # gitlab-ctl stop启动gitlab: # gitlab-ctl start重启gitlab: # gitlab-ctl restart

浏览器打开 http://172.17.1.107 wb页面并设置密

密码自定义设置 设置完之后 账号 root 密码 你刚才设置的 登录成功界面

我这边直接创建一个项目进行演示

在项目下面会有git的操作指南教你如何操作

至此,基于Ubuntu 16.04 x64操作系统的GitLab服务器搭建工作就完成了!具体详细教程可以看我这篇文章

GitLab 的介绍与安装配置 https://www.lhdyx.cn/article/75

本地操作git 在本地创建一个文件夹即可 命令就是官网的

下面我们操作我们的项目就是这样的 为下面打基础 现在安装Gitlba-Runner

二. Gitlab-Runner安装

代码语言:javascript
代码运行次数:0
运行
复制
curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null

再选择你的 Ubuntu 版本,将下面的配置内容写进

代码语言:javascript
代码运行次数:0
运行
复制
vim /etc/apt/sources.list.d/gitlab-ci-multi-runner.list

文件不存在就新建该文件

代码语言:javascript
代码运行次数:0
运行
复制
deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ci-multi-runner/ubuntu xenial main

安装 gitlab-ci-multi-runner:

代码语言:javascript
代码运行次数:0
运行
复制
sudo apt-get updatesudo apt-get install gitlab-ci-multi-runner

启动gitlab-runner

代码语言:javascript
代码运行次数:0
运行
复制
gitlab-runner start

注册gitlab-runner 打开gitlab网站找到自己的项目下面的Runnnner

最主要的我们需要这些信息注册 执行注册命令

代码语言:javascript
代码运行次数:0
运行
复制
gitlab-runner register

参数解释:

绿色说明注册成功 这个时候我们就可以通过runner进行操作 四. 编写编写.gitlab-ci.yml文件 一般配置完Runner后都会有这个直接点击创建

内容为

代码语言:javascript
代码运行次数:0
运行
复制
stages:
  - deploy

docker-deploy:
  stage: deploy
  # 执行Job内容
  script:
    - echo 开始构建....
    - cd springboot-thymeleaf
    - echo 构建中....
    - mvn clean package
    - cd target/alpine-hwlogs/
    - docker build -t springboot .
    - echo 构建成功....
    - echo 发布中....
    - docker run -d -p 8000:8000 --name springboot springboot
    - echo 发布中成功!
  only:
    # 只有在master分支才会执行
    - master

大概意思为 进到项目路径打包创建docker镜像 然后运行

四.安装java1.8和 maven以及Docker

简单说下步骤

1. 安装java1.8
添加ppa
代码语言:javascript
代码运行次数:0
运行
复制
sudo add-apt-repository ppa:webupd8team/javasudo apt-get update
安装oracle-java-installer
代码语言:javascript
代码运行次数:0
运行
复制
sudo apt-get install oracle-java8-installer
设置系统默认jdk
代码语言:javascript
代码运行次数:0
运行
复制
sudo update-java-alternatives -s java-8-oracle
java安装测试
代码语言:javascript
代码运行次数:0
运行
复制
java -versionjavac -version

安装成功

2. 安装maven
1. 下载imaven的tar.gz安装包,下载路径如下:
代码语言:javascript
代码运行次数:0
运行
复制
http://maven.apache.org/download.cgi
2. 将压缩包复制到 /usr/local/maven 目录下(这个自定义的)
代码语言:javascript
代码运行次数:0
运行
复制
apache-maven-3.6.0-bin.tar.gz /usr/local/
3. 解压安装包
代码语言:javascript
代码运行次数:0
运行
复制
tar -zxvf apache-maven-3.6.0-bin.tar.gz
4. 设置环境变量
代码语言:javascript
代码运行次数:0
运行
复制
vim /etc/profile
在profile文件中加入如下内容:
代码语言:javascript
代码运行次数:0
运行
复制
export M2_HOME=/usr/local/maven/apache-maven-3.6.0export PATH=$M2_HOME/bin:$PATHexport CLASSPATH=.:$M2_HOME/lib

刷新

代码语言:javascript
代码运行次数:0
运行
复制
source /etc/profile
安装测试
代码语言:javascript
代码运行次数:0
运行
复制
mvn -v
3.安装Docker

前提条件 Docker 要求 Ubuntu 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的 Ubuntu 版本是否支持 Docker。通过 uname -r 命令查看你当前的内核版本

代码语言:javascript
代码运行次数:0
运行
复制
runoob@runoob:~$ uname -r

使用脚本安装 Docker 1、获取最新版本的 Docker 安装包

代码语言:javascript
代码运行次数:0
运行
复制
wget -qO- https://get.docker.com/ | sh

输入当前用户的密码后,就会下载脚本并且安装Docker及依赖包。

安装完成后有个提示:

代码语言:javascript
代码运行次数:0
运行
复制
If you would like to use Docker as a non-root user, you should now consider
    adding your user to the docker group with something like:

    sudo usermod -aG docker runoob
   Remember that you will have to log out and back in for this to take effect!

当要以非root用户可以直接运行docker时,需要执行 sudo usermod -aG docker runoob 命令,然后重新登陆,否则会有如下报错

2、启动docker 后台服务

代码语言:javascript
代码运行次数:0
运行
复制
runoob@runoob:~$ sudo service docker start

3、测试运行hello-world

代码语言:javascript
代码运行次数:0
运行
复制
runoob@runoob:~$ docker run hello-world

因为没有镜像 需要去下载 镜像加速 鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是网易的镜像地址:

代码语言:javascript
代码运行次数:0
运行
复制
http://hub-mirror.c.163.com

新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 来配置 Daemon

请在该配置文件中加入(没有该文件的话,请先建一个):

代码语言:javascript
代码运行次数:0
运行
复制
{  registry-mirrors: [http://hub-mirror.c.163.com]}

五. 项目准备

准备一个SpringBoot项目并编写Dockerfile文件以及maven插件操作

1.SpringBoot项目: 一个简单项目 访问返回信息 2.Dockerfile内容如下

代码语言:javascript
代码运行次数:0
运行
复制
#  基础镜像
FROM java:openjdk-8-jre-alpine
# 维护者信息
MAINTAINER lihaodongmail@163.com
#Default to UTF-8 file.encoding
ENV LANG C.UTF-8
#设置alpine时区
ENV TIMEZONE Asia/Shanghai
#alpine自带的包含dl-cdn的域名非常慢,需要修改后才能下载数据。
#RUN apk add -U tzdata && ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime && echo ${TIMEZONE} > /etc/timezone
#RUN sed -i -e s/dl-cdn/dl-4/g /etc/apk/repositories && apk add -U tzdata && ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime && echo ${TIMEZONE} > /etc/timezone

#添加应用
ADD springboot-thymeleaf-0.0.1-SNAPSHOT.jar springboot-thymeleaf-0.0.1-SNAPSHOT.jar
#参数
#ENV PARAMS=
#执行操作
ENTRYPOINT [ sh, -c, java -Xmx50m -Djava.security.egd=file:/dev/./urandom -jar springboot-thymeleaf-0.0.1-SNAPSHOT.jar ]

3.然后运用maven插件

代码语言:javascript
代码运行次数:0
运行
复制
<plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/alpine-hwlogs</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>src/main/docker</directory>
                                    <filtering>true</filtering>
                                </resource>
                            </resources>
                        </configuration>

                    </execution>
                </executions>
            </plugin>
            <!-- copy文件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks> <!-- 你将要拷贝的位置 -->
                                <copy todir=${project.build.directory}/alpine-hwlogs>
                                    <!-- 从哪里拷贝 -->
                                    <fileset dir=${project.build.directory}>
                                        <!-- 拷贝内容 -->
                                        <include name=*.jar/>  
                                    </fileset>
                                </copy>
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

大概意思为打包时在target下创建lpine-hwlogs文件夹并把Dockerfile文件,打包好的jar包copy到lpine-hwlogs目录下

六.上传GitLab测试

现在我把SpringBoot项目上传到GitLab看下效果

过程就是把项目push到gitlab仓库 现在打开gitlab看下我们的runner有没有执行

已经在执行我写的脚本 maven打包下载依赖等 稍等一会

说我没有权限 才想起来 运行gitlab-runnner的是gitlab-runnner用户

添加gitlab-runner用户 重启docker 然后重试任务

再次查看运行情况

已经搞定

登录服务查看镜像情况以及浏览器服务测试下

打开浏览器访问: http://172.17.1.107:8000/index

搞定!

七. 安装Harbor搭建镜像仓库

官方文档:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

1 环境依赖:docker docker-compose

1.1 下载docker:

Ubuntu16 可参考 https://blog.csdn.net/jinking01/article/details/82490688

其它系统可参考:http://www.runoob.com/docker/ubuntu-docker-install.html

我的服务器是在阿里云上,直接运行:

代码语言:javascript
代码运行次数:0
运行
复制
apt-get install docker.io

注:

检测安装结果:docker -v

1.2 下载docker-compose

阿里云上:apt-get install docker-compose

官网教程参考:https://docs.docker.com/compose/install/#install-compose

1.2.1 官网解决方案一(Linux):(问题:我遇到问题就是下载速度太慢)

代码语言:javascript
代码运行次数:0
运行
复制
sudo curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose`
1.2.2 官网解决方案二:用python的pip工具
代码语言:javascript
代码运行次数:0
运行
复制
pip install docker-compose

注:

检测安装情况:

代码语言:javascript
代码运行次数:0
运行
复制
docker-compose --version
1.3 下载Harbor

官网地址:https://github.com/goharbor/harbor/releases

1.3.1 复制地址,运行wget url:
代码语言:javascript
代码运行次数:0
运行
复制
wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-online-installer-v1.7.1.tgz

注:下载速度太慢,可以windows上下载下来然后copy到服务器上 创建 /usr/local/harbor文件夹 然后授权

将下载的包传到服务器解压即可

1.3.2 解压:

代码语言:javascript
代码运行次数:0
运行
复制
tar -xvf harbor-online-installer-v1.7.1.tgz

2 配置harbor

2.1 修改harbor.cfg

代码语言:javascript
代码运行次数:0
运行
复制
cd harborvim harbor.cfg

将 hostname的值修改成本机IP,比如198.127.0.1

部分配置含义:

代码语言:javascript
代码运行次数:0
运行
复制
#配置访问的地址hostname = 198.127.0.1#使用http方式访问管理界面ui_url_protocol = http#配置admin的密码,默认是Harbor12345harbor_admin_password = 12345#更改harbor存储路径,默认是/datasecretkey_path = /mnt/vdc/harbor_data
2.2 开始安装:
代码语言:javascript
代码运行次数:0
运行
复制
./install.sh

docker要pull很多东西 等下就好了

发现启动nginx发现报错 我们都知道默认80端口 那需要修改harbor里的nginx的默认端口配置:

第一种:

2.3.1 修改docker-compose.yml
代码语言:javascript
代码运行次数:0
运行
复制
vim docker-compose.yml

例如 修改80:80 为 81:80

2.3.2修改config.xml,在$publicurl()后增加 :81

代码语言:javascript
代码运行次数:0
运行
复制
vim common/templates/registry/config.yml

2.3.3重新生成配置文件

代码语言:javascript
代码运行次数:0
运行
复制
sudo ./prepare

2.4 启动Harbor:

代码语言:javascript
代码运行次数:0
运行
复制
docker-compose up -d

停止命令

代码语言:javascript
代码运行次数:0
运行
复制
docker-compose down -v

2.4.1 进入Harbor的UI界面

(端口默认是80,nginx如果修改了端口映射(比如上面的81:80),那端口就是81):IP:Port

Eg: 172.17.101:81

Harbor默认用户名:adminHarbor

默认密码:Harbor12345

我之前有做修改为123456

登录成功后

创建一个test项目

既然Harbor搭建完成了 test项目也新建完成了 那我们就需要将docker的镜像上传到我们的私仓里

在我们之前装的docker修改insecure-registry

文件目录:/etc/docker/daemon.json (没有则新建该文件)

代码语言:javascript
代码运行次数:0
运行
复制
vim /etc/docker/daemon.json

然后重启docker:

代码语言:javascript
代码运行次数:0
运行
复制
service docker restart
docker push镜像:
登录Harbor
代码语言:javascript
代码运行次数:0
运行
复制
docker login 172.17.1.101:81

输入

代码语言:javascript
代码运行次数:0
运行
复制
用户名admin密码12345

登录成功后 我们把之前的springboot镜像上传到Harbor

使用镜像源创建一个指定镜像的标签 推送镜像到Harbor

八 查看成果

登录Harbor 查看test项目

完美!然后就可以随意push pull了

本文测试SpringBoot项目源码:

https://github.com/LiHaodong888/dockerexample

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 李浩东的博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. 概念
  • 二. 开始搭建
  • 1.依赖包安装
  • 2.GitLab安装
    • 2.1官方教程
    • 2.2清华源(推荐)
    • 3.GitLab启动
  • 4.GitLab配置
    • 4.1更改服务器IP地址
  • 四.安装java1.8和 maven以及Docker
    • 1. 安装java1.8
      • 添加ppa
      • 安装oracle-java-installer
      • 设置系统默认jdk
      • java安装测试
    • 2. 安装maven
      • 1. 下载imaven的tar.gz安装包,下载路径如下:
      • 2. 将压缩包复制到 /usr/local/maven 目录下(这个自定义的)
      • 3. 解压安装包
      • 4. 设置环境变量
      • 在profile文件中加入如下内容:
      • 安装测试
    • 3.安装Docker
  • 五. 项目准备
    • 准备一个SpringBoot项目并编写Dockerfile文件以及maven插件操作
  • 六.上传GitLab测试
  • 七. 安装Harbor搭建镜像仓库
  • 1 环境依赖:docker docker-compose
    • 1.1 下载docker:
    • 1.2 下载docker-compose
    • 1.2.2 官网解决方案二:用python的pip工具
    • 1.3 下载Harbor
    • 1.3.1 复制地址,运行wget url:
  • 2 配置harbor
    • 2.2 开始安装:
    • 2.3.1 修改docker-compose.yml
    • docker push镜像:
      • 登录Harbor
  • 八 查看成果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档