文章目录
- 项目管理二:gogs+Jenkins+docker+harbor 项目部署
- 基础环境搭建
- 搭建git 和git私服环境
- 搭建git
- 搭建git私服 gogs
- 搭建docker私服 harbor
- 搭建Jenkins
- 通过jenkins部署微服务项目
- jenkins 整体部署微服务
- jenkins 单独部署某个微服务
项目管理二: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/
安装:
- git 目录下 执行make configure 出现 GEN configure 表示成功
- ./configure --prefix=/usr/local/git 这里的/usr/local/git是你希望将git安装到的目标目录
- 使用配置文件编译 make profix=/usr/local/git
- 编译无误执行make prefix=/usr/local/git install
- 添加环境变量 vim /etc/profile 添加
export GIT_HOME=/usr/local/git
export PATH=$JAVA_HOME/bin:$M2_HOME/bin:$GIT_HOME/bin:$PATH
- 执行 source /etc/profile
- 执行 git --version 出现git版本表示成功
搭建git私服 gogs
简介:Gogs 是⼀款开源的轻量级Git web服务,其特点是简单易⽤完档⻬全、国际化做的相当不 错。其主要功能如下:
- 提供Http 与ssh 两种协议访问源码服务
- 提供可WEB界⾯可查看修改源码代码
- 提供较完善的权限管理功能、其中包括组织、团队、个⼈等仓库权限
- 提供简单的项⽬viki功能
- 提供⼯单管理与⾥程碑管理。
官⽹: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
环境配置:
配置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 还之前整体项目的配置文件, 只不过执行的时候指定了启动某个微服务
配置完成后点击
查看日志 ,有报错解决报错报错。
其他微服务也是这么配置,把相关路径改改,启动的项目名改改,其他配置基本不用改。
到此整个项目部署完成。