微服务[学成在线] day20:项目部署与持续集成(DevOps)

😎 知识点概览

为了方便后续回顾该项目时能够清晰的知道本章节讲了哪些内容,并且能够从该章节的笔记中得到一些帮助,所以在完成本章节的学习后在此对本章节所涉及到的知识点进行总结概述。

本章节为【学成在线】项目的 day20 的内容。

  • 原讲义中对该章节的 gitlabjenkins 安装步骤以及部署容器的内容和步骤描述得不够详细,在本文中做出了补充,详细的描述每个步骤。
  • 本章节建议还是尝试看笔记来完成一次操作,然后再去看视频资料,这样能理解得更深刻。

目录

内容会比较多,可以根据目录进行按需查阅。

一、DevOps介绍

DevOps 是 DevelopmentOperations 两个词的缩写,引用百度百科的定义:

image-20200607210842378

DevOps 是一种方法或理念,它涵盖开发、测试、运维的整个过程。DevOps 是提高软件开发、测试、运维、运营等各部门的沟通与协作质量的方法和过程,DevOps 强调软件开发人员与软件测试、软件运维、质量保障(QA)部门之间有效的沟通与协作,强调通过自动化的方法去管理软件变更、软件集成,使软件从构建到测试、发布更加快捷、可靠,最终按时交付软件。

image-20200607210903849

DevOps 兴起于2009年,近年来由于云计算、互联网的发展,促进了DevOps的基础设施及工具链的发展,涌现了一大批优秀的工具,这些工具包括开发、测试、运维的各各领域,例如:GitHub、Git/SVN、Docker、Jenkins、Hudson、Ant/Maven/Gradle、Selenium、QUnit、JMeter 等。下图是DevOps相关的工具集:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6TrNCM8J-1595704048578)(https://qnoss.codeyee.com/20200704_5b6u5pyN5YqhW+WtpuaIkOWcqOe6v10gZGF5MjAtMe+8mkRldk9wcyDpobnnm67pg6jnvbLkuI7mjIHnu63pm4bmiJA=/image3.png)]

二、使用GitLab管理项目

0x01 安装Gitlab

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

GitLab 与 GitHub的功能相似,通常企业使用GitLab在局域网搭建自己的Git代码管理仓库

拉取gitlab、redis、postgresql,gitlab 依赖 redispostgresql

sudo docker pull sameersbn/redis
sudo docker pull sameersbn/postgresql
sudo docker pull gitlab/gitlab-ce:latest

新建容器的目录

sudo mkdir /var/docker/postgresql/data -p
sudo mkdir /var/docker/redis/data -p
sudo mkdir /var/docker/gitlab/data -p

创建 postgresql、redis 容器:

# 创建postgresql容器
sudo docker run --name postgresql -d --privileged=true -e 'DB_NAME=gitlabhq_production' -e 'DB_USER=gitlab' -e 'DB_PASS=123123' -e 'DB_EXTENSION=pg_trgm' -v /var/docker/postgresql/data:/var/lib/postgresql sameersbn/postgresql

# 创建redis容器
sudo docker run --name redis -d --privileged=true -v  /var/docker/redis/data:/var/lib/redissameersbn/redis

创建gitlab容器:

sudo docker run --name gitlab -d --link postgresql:postgresql --link redis:redisio \
--hostname 10.1.1.161 -p 10022:22 -p 8910:80 -p 8911:443 -e 'GITLAB_PORT=8899' \
-e 'GITLAB_SSH_PORT=10022' \
-e 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
-e 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \
-e 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \
-e  'GITLAB_HOST=10.1.1.161' \
-e 'SMTP_AUTHENTICATION=login' \
-v /var/docker/gitlab/data:/home/git/data docker.io/gitlab/gitlab-ce
  • 使用 \ 来标识shell命令的换行,在shell命令过长的情况下使用 \ 换行可以使内容更加清晰
  • –link:可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,并且接收容器可以获取源容器的一些数据,如源容器的环境变量

浏览器访问:http://10.1.1.161:8910

初次访问需要等待一段时间。

查看 gitlab的启动日志

sudo docker logs -f gitlab

image-20200607182758861

启动完成后,配置初始密码,默认用户名为 root

image-20200607183035804

0x02 创建项目

登录 gitlab 后访问 http://10.1.1.161:8910/projects/new

填写项目的基本信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bqvoUHne-1595704048584)(https://qnoss.codeyee.com/20200704_5b6u5pyN5YqhW+WtpuaIkOWcqOe6v10gZGF5MjAtMe+8mkRldk9wcyDpobnnm67pg6jnvbLkuI7mjIHnu63pm4bmiJA=/image6.png)]

项目构建成功后,得到一个项目的链接 http://10.1.1.161:8910/root/xc-services-project

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hyk0NvRT-1595704048585)(https://qnoss.codeyee.com/20200704_5b6u5pyN5YqhW+WtpuaIkOWcqOe6v10gZGF5MjAtMe+8mkRldk9wcyDpobnnm67pg6jnvbLkuI7mjIHnu63pm4bmiJA=/image7.png)]

0x03 将项目推送至gitlab

打开 cmd,进入到项目的目录下

1、运行 git init 初始化项目的git配置

2、在项目根目录下创建 .gitignore 文件,将一些编译后生成的文件排除在外 不上传至git仓库,内容如下

.idea
*/target/*.*
*/target/**/*.*
*.class
*.iml
##ignore this file##
.classpath
.project
.settings     
 ##filter databfile、sln file##
*.mdb  
*.ldb  
*.sln   
##class file##
*.com  
*.class  
*.dll  
*.exe  
*.o  
*.so 
# compression file
*.7z  
*.dmg  
*.gz  
*.iso  
*.jar  
*.rar  
*.tar  
*.zip  
*.via
*.tmp
*.err
# OS generated files #  
.DS_Store  
.DS_Store?  
._*  
.Spotlight-V100  
.Trashes  
Icon?  
ehthumbs.db  
Thumbs.db

3、执行 git add . 命令,暂存当前目录下的所有子目录以及文件到git记录

4、执行 git commit -m "第一次提交" 将暂存的记录正式提交到 git 记录内,-m 参数的内容为描述信息

5、执行以下命令,设置远程仓库的地址

git remote add origin "http://10.1.1.161:8910/root/xc-services-project.git" 

6、执行 git push origin master 推送代码到远程仓库

image-20200608184308041

推送成功,查看远程仓库

image-20200608194951105

三、部署微服务到Docker

0x00 Docker简介

服务器虚拟化主要有两种技术:

1、Hypervisor也叫VMM(virtual machine monitor)即虚拟机监视器

Hypervisor 是一种将操作系统与硬件抽象分离的方法,实现在宿主机(host machine)上能同时运行多个客户机(guest machine),每个客户机就是一个虚拟机,这些虚拟机高效地分享宿主机的硬件资源。

如下图:

image-20200608135503026

在服务器(宿主机)上安装操作系统,并安装hypervisor虚拟机管理软件,如VMware、VirtualBox等,由
hypervisor管理多个虚拟机,每个虚拟机上需要安装客户操作系统、依赖库、应用软件。

2、Containers容器化技术

image-20200608135556836

容器技术中 docker 引擎取代了 hypervisor,docker引擎是运行在住宿操作系统上的一个进程,该进程管理了多个docker容器,每个docker容器集成了应用软件、依赖库,容器之间相互隔离。

3、技术对比

资源占用:

虚拟机由于是独立的操作系统,占用资源比docker多。

启动速度:

虚拟机包括操作系统,启动虚拟机相当于启动一个操作系统,容器则不一样,容器中只包括操作系统的内核,启动
一个容器实例相当于启动一个进程,容器的启动速度比虚拟机快。

体积:

容器包括操作系统内核、软件及依赖库,虚拟机不仅包括软件和依赖库还将完整的操作系统打包进去,虚拟机的体
积比容器大的多。

4、Docker 容器架构

image-20200608135730960

  • Docker daemon(Docker守护进程)

    Docker守护进程是部署在操作系统上,负责支撑 Docker Container 的运行以及本地 Image 的管理。

  • Docker client

    用户不直接操作Docker daemon,用户通过 Docker client 访问 DockerDocker client 提供
    pull、run 等操作命令实现对docker的操作。

  • Docker Image

    Docker 镜像就是一个只读的模板。 例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Tomcat或用户需要的其它应用程序。 镜像可以用来创建 Docker 容器。 Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。

  • Docker Container

    Docker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停
    止、删除。每个容器都是相互隔离的、保证安全的平台。打个比方,镜像相当于类,容器相当于对象。

  • Docker Registry

    Docker 仓库分为公开仓库(Public)和私有仓库(Private)两种形式 最大的公开仓库是
    Docker Hub,存放了数量庞大的镜像供用户下载。 用户也可以在本地网络内创建一个私有仓库。 当用户创建自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

0x01 安装docker

Docker 可以运行在 MAC、Windows、Centos、DEBIAN、UBUNTU 等操作系统上,提供社区版和企业版,本教程基于Centos安装Docker。Centos6 对 docker 支持的不好,使用 docker 时建议升级到 centos7

1、在 Centos7 上安装Docker

直接通过yum安装即可:

yum install -y docker

启动docker:service docker start

查询docker版本: docker version

关于的 docker 的一些常用的命令和操作,参考 https://www.runoob.com/docker/docker-tutorial.html

0x02 部署流程

本项目微服务采用 SpringBoot 开发,将每个微服务工程打成Jar 包,最终在 Docker 容器中运行 jar,部署流程如下:

1、SpringBoot 工程最终打成 Jar

2、创建Docker镜像

3、创建容器

4、启动容器

0x03 打包

1、使用 maven 的打包插件:

将下边的插件依赖拷贝到微服务工程中,本例子将学成在线的 Eureka 工程打包:

<build>
    <finalName>${project.artifactId}-${project.version}</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

完整的 Eureka 工程 pom.xml 文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>xc-framework-parent</artifactId>
        <groupId>com.xuecheng</groupId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../xc-framework-parent/pom.xml</relativePath>
    <
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值