项目管理二:gogs+Jenkins+docker+harbor 项目部署

基础环境搭建

根据项目管理一 搭建好jdk、maven、docker、dockercompose、jenkins。

防火墙记得关闭 或者开放对应端口

搭建git 和git私服环境

搭建git

卸载centos自带的git: yum remove git
下载git:wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.24.0.tar.gz --no-check-certificate
如果出现:-bash: wget: command not found 先安装wget yum install wget -y
在这里插入图片描述
安装完成后当前目录下会出现对应tar文件

安装git需要的环境:yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel autoconf gcc
创建git文件夹并把git安装包放到git文件夹中:mkdir git ; mv git-2.24.0.tar.gz git/
安装:

  1. git 目录下 执行make configure 出现 GEN configure 表示成功
  2. ./configure --prefix=/usr/local/git 这里的/usr/local/git是你希望将git安装到的目标目录
  3. 使用配置文件编译 make profix=/usr/local/git
  4. 编译无误执行make prefix=/usr/local/git install
  5. 添加环境变量 vim /etc/profile 添加
export GIT_HOME=/usr/local/git
export PATH=$JAVA_HOME/bin:$M2_HOME/bin:$GIT_HOME/bin:$PATH
  1. 执行 source /etc/profile
  2. 执行 git --version 出现git版本表示成功

搭建git私服 gogs

简介:Gogs 是⼀款开源的轻量级Git web服务,其特点是简单易⽤完档⻬全、国际化做的相当不 错。其主要功能如下:

  1. 提供Http 与ssh 两种协议访问源码服务
  2. 提供可WEB界⾯可查看修改源码代码
  3. 提供较完善的权限管理功能、其中包括组织、团队、个⼈等仓库权限
  4. 提供简单的项⽬viki功能
  5. 提供⼯单管理与⾥程碑管理。

官⽹:https://gogs.io
下载:https://gogs.io/docs/installation 选择 linx amd64 下载安装
解压 tar -zvxf gogs_0.12.3_linux_amd64.tar.gz
在这里插入图片描述
在scripts 下有对应的sql 文件 Gogs 支持mysql存储
在这里插入图片描述
如果不用mysql存储的话跳过 如果用MySQL存储的话 先执行mysql.sql文件

运行gogs进行初始化配置 ./gogs web 默认端口3000
在这里插入图片描述
访问:ip:3000
配置数据库
在这里插入图片描述
基础配置
在这里插入图片描述
可选配置:
在这里插入图片描述
可以不用管 默认第一个账号就是管理员账号
安装完成后gogs目录下会多出custom/conf/app.ini 这个配置文件关系到gogs的配置

## 基础信息
BRAND_NAME = Gogs
RUN_USER   = root
RUN_MODE   = prod

[database] ## 数据库的配置
TYPE     = mysql
HOST     = ip:3306
NAME     = gogs
USER     = root
PASSWORD = xxx
SSL_MODE = disable
PATH     = /root/gogs/data/gogs.db

[repository]
ROOT = /root/gogs-repositories
[server]  ##服务的配置
DOMAIN           = ip # 自己的ip
HTTP_PORT        = 3000
EXTERNAL_URL     = http://ip:3000/
DISABLE_SSH      = false
SSH_PORT         = 3001  # 设置ssh端口 默认22 防止冲突 改为其他的
START_SSH_SERVER = true # 开启ssh服务
OFFLINE_MODE     = false

[mailer] # 邮件配置
ENABLED = true #开启邮箱服务 邮箱需要开启smtp服务  这个自己百度qq邮箱如何开启smtp服务
HOST = smtp.qq.com:465 # 固定的
FROM = 522043032@qq.com # 发送人的邮箱
USER = 522043032@qq.com # 接收人的邮箱  这两个可以设置同一个
PASSWORD = xxx # 授权码

[service]
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL     = false
DISABLE_REGISTRATION   = false
ENABLE_CAPTCHA         = true
REQUIRE_SIGNIN_VIEW    = false

安装好后 创建仓库 初始化项目 配置ssh密钥 和github一样。具体gogs的使用查看官网 很简单
在这里插入图片描述
工程创建完成就是这个样子。要注意的是如果创建了组织 要注意权限的问题 不同的团队 里面的成员的权限是不一样。如果没有写的权限那么推送代码就是失败。
gogs重要的日志在
gogs/log
gogs/log/hooks/serv.log

搭建docker私服 harbor

修改docker 配置vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://3dse7md.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.2.111:17000"]  #这个地址对应harbor的地址和端口
}

重启docker systemctl daemon-reload && systemctl restart docker
创建对应的文件目录:mkdir harbor
进入目录 cd harbor
下载harbor :wget https://storage.googleapis.com/harbor-releases/release-1.9.0/harbor-offline-installer-v1.9.4.tgz
解压:tar -zxvf harbor-offline-installer-v1.9.4.tgz
在这里插入图片描述
修改harbor.yml配置

hostname: 192.168.2.111
http:
  # port for http, default is 80. If https enabled, this port will redirect to https port
  port: 17000

配置好这两个就可以了 其他的根据自己需求配置
初始化安装:/install.sh
如果出现:'str' object has no attribute 'get' 这个错误 看看是不是 yml的配置不对 例如 冒号后面少了空格
成功出现
在这里插入图片描述
在这里插入图片描述
访问http://192.168.2.111:17000
在这里插入图片描述
密码:Harbor12345

测试推送镜像
在docker 上登录 私服

$ docker login 192.168.2.111:17000
Username: admin
Password:
Login Succeeded

查看现有的镜像:docker images
在这里插入图片描述
随便找一个镜像 比如找个nginx,通过tag 重新打标签 docker tag goharbor/nginx-photon:v1.9.4 192.168.2.111:17000/library/nginx:test
新的标签名必须带有私有仓库的地址信息 例:192.168.2.111:17000/library/nginx:test
私服的地址和端口/私服的项目名/镜像名称:版本号

推送镜像docker push 192.168.2.111:17000/library/nginx:test
在这里插入图片描述
在这里插入图片描述
成功

在maven的settings文件中配置相关信息

 <pluginGroups>
	<pluginGroups>
		<pluginGroup>com.spotify</pluginGroup>  
	</pluginGroups>
  </pluginGroups>
<server>
    <id>仓库ip:端口</id>
    <username>用户名</username>
    <password>密码</password>
    <configuration>
      <email>邮箱</email>
    </configuration>
  </server>

最好是在harbor创建新的用户,然后在项目中把该用户添加进去
在父项目的pom文件加上

<build>
<finalName>${project.name}</finalName>
 <pluginManagement>
  <plugins>
   <plugin>
      <groupId>com.spotify</groupId>
       <artifactId>dockerfile-maven-plugin</artifactId>
       <version>${docker.plugin.version}</version>
       <configuration>
       	//父工程提前配置好这些信息在 <properties>中
         <username>${docker.username}</username>
         <password>${docker.password}</password>
         <repository>${docker.registry.url}:17000/${docker.namespace}/${project.artifactId}</repository>
         <tag>${project.version}</tag>
         <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
         <buildArgs>
             <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
         </buildArgs>
     	</configuration>
         <!--子服务添加如下配置,运行 mvn deploy 命令便会自动打包镜像-->
          <!--<executions>
              <execution>
                  <id>default</id>
                  <goals>
                      <goal>build</goal>
                      <goal>push</goal>
                  </goals>
              </execution>
          </executions>-->
      </plugin>
  </plugins>
  </pluginManagement>
</build>

在需要构建镜像的子工程中的pom加上

<build>
  <plugins>
    <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>dockerfile-maven-plugin</artifactId>
        <configuration>
            <username>${docker.username}</username>
            <password>${docker.password}</password>
            <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
            <tag>${project.version}</tag>
            <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
            <buildArgs>
                <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
            </buildArgs>
            <skip>false</skip>
        </configuration>
    </plugin>
  </plugins>
</build>

如果想在开发环境就把镜像构建和推送那么可以考虑在服务器开放2375端口,不过不推荐这样做。然后执行
mvn clean install dockerfile:build dockerfile:push

搭建Jenkins

根据项目管理一 搭建jenkins基础配置
需要安装的插件有
Maven Integration、Deploy to container、Git plugin(可能自动安装)、Publish Over SSH、SSH
环境配置
maven:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置ssh远程连接
在这里插入图片描述
在这里插入图片描述
配置ssh公私钥
jenkins服务器中生成公私钥 :ssh-keygen -t rsa 一路回车
在这里插入图片描述
成功
查看公钥并配置到gogs中 cat /root/.ssh/id_rsa.pub
在这里插入图片描述
配置私钥到jenkins中
查看私钥:cat /root/.ssh/id_rsa
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通过jenkins部署微服务项目

jenkins 整体部署微服务

本次项目部署流程通过提交代码到gogs,jenkins从gogs中拉取代码构建jar,通过dockerfile文件构建镜像,然后推送到harbor,最后执行docker-compose.yml文件完成项目启动
本次案例项目结构
在这里插入图片描述
启动common是公用模块,auth是认证模块是一个微服务,ops是运维模块,包含有很多微服务。下面以auth为例,其他微服务同样。
项目基本配置
在父工程的pom文件和其他微服务的pom文件中需要添加对应插件依赖,这部分在搭建harbor那一块有说到。
在需要构建成镜像的微服务中编写Dockerfile文件(名称不能搞错),该文件和pom文件同级目录
然后编写好启动所有微服务的docker-compose.yml 文件。
至于这两个文件怎么编写,比较简单,自行百度。后续在写docker方面的博客在补充
jenkins构建项目
在这里插入图片描述
在这里插入图片描述
然后到这个界面
在这里插入图片描述
在这里插入图片描述
在Pre step下配置构建前需要执行的shell命令
在这里插入图片描述
在这里插入图片描述

#定义环境变量
HARBOR_IP='harbor的ip'
HARBOR_USER='用户名'
HARBOR_USER_PASSWD='密码'
#登录到harbor 用于推送
sudo docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}:17000
#切换到docker-compose.yml的目录
cd /usr/local/springcloud/baseproject
#停止和删除旧的服务、容器、镜像
docker-compose down --rmi all

构建项目:
在这里插入图片描述
这里是没有推送的,因为推送慢,所以就没有推送,如果想推送执行使用下面的命令
mvn clean install -Dmaven.test.skip=true dockerfile:build dockerfile:push
项目构建成功执行shell启动服务
在这里插入图片描述
让然后看看执行的日志:
执行构建前的shell
在这里插入图片描述
开始构建项目、打包镜像、成功
在这里插入图片描述
构建成功执行shell启动
在这里插入图片描述
所有步骤完成:
在这里插入图片描述

项目界面:
在这里插入图片描述
这是整体项目的构架,每次构建都是所有微服务整体打包,这显然不是我们想要的,如果想要单独某个微服务打包,用下面的方法,以auth为例,其他微服务同样。

jenkins 单独部署某个微服务

还是新建任务
在这里插入图片描述
在这里插入图片描述
源码管理的配置不变,还是整体项目的git连接
在这里插入图片描述
配置Pre Steps
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
配置构建:
在这里插入图片描述
构建完成后
在这里插入图片描述
docker-compose.yml 还之前整体项目的配置文件, 只不过执行的时候指定了启动某个微服务
配置完成后点击在这里插入图片描述
在这里插入图片描述
查看日志 ,有报错解决报错报错。
其他微服务也是这么配置,把相关路径改改,启动的项目名改改,其他配置基本不用改。
到此整个项目部署完成。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐