jenkins+docker进行微服务部署

1、jenkins配置

由于公司使用的是内部网络,没有打开互联网,所以在进行jenkins构建的时候,没法下载对应插件,刚开始使用镜像的方式制作了jenkins镜像,
但是jenkins镜像内部又缺少maven等插件,弄了许久还是需要下载插件;感觉有些麻烦,后面直接用之前外网的一个jenkins进行替代即可。jenkins配置
主要包含2部分:1、jenkins的环境变量配置及jenkins启动war包 2、jenkins对应的插件及命名空间配置。

1.1、jenkins设置环境变量

在我们安装jenkins之前,需要知道关于Jenkins怎样存储数据。事实上,不管你的Jenkins的war包村建存放在哪里,jenkins都会把其所有重要数据存放在一个专门用户、隔离的、成为Jenkins主目录的目录下。在这里,Jenkins存储关于构建服务器配置信息、构建作业、构建产物和其他有用的信息,当然包括你安装了任何插件。这个目录会消耗大量磁盘空间。
默认情况下,Jenkins主目录被称为.jenkins,会被放在你的当前用户主目录下。例如,假如你再window7下运行一个机器,且用户名是"tom",主目录会在:c:\Users\tom.jenkins下,在linux下,主目录可能在:.home/tom/.jenkins等。

你可以使用定义JENKINS_HOME环境变量来强行使jenkins使用一个不同目录作为其主目录。
我们一般通过编写一个shell脚本实现,比如以下:主目录:/data/jenkins/data

配置环境变量:/etc/profile

export JAVA_HOME=/root/software/jdk1.8.0_192
CLASSPATH=.:$JAVA_HOME/lib/
export JENKINS_BASE=/data/jenkins
export JENKINS_HOME=/data/jenkins/data
export PATH=$PATH:$JENKINS_BASE:$JENKINS_HOME:$JAVA_HOME/bin

1.2、插件拷贝到JENKINS_HOME

将另一个已经安装好插件的机器上的JENKINS_HOME下的除workspace文件拷贝到当前机器的JENKINS_HOME下。

1.3、启动程序

将jenkins.war也拷贝到此目录下,总体目录结构及文件如下:

对应启动脚本如下:jenkins_start.sh

#!/bin/bash
nohup java -jar jenkins.war --httpPort=8008 >jenkins.out 2>&1 &

1.4、系统访问

系统输入:

 http://ip:8008

系统访问正常:

2、jenkins+docker进行微服务后端构建

2.1、镜像制作

镜像打包制作的话,一般我们有两种方式。方式一:使用Maven插件为SpringBoot应用构建Docker镜像。这种情况主要是在pom.xml文件中添加maven的docker镜像打包依赖:
在应用的pom.xml文件中添加docker-maven-plugin的依赖:


    com.spotify
    docker-maven-plugin
    1.1.0
    
        
            build-image
            package
            
                build
            
        
    
    
        mall-tiny/${project.artifactId}:${project.version}
        http://192.168.3.101:2375
        java:8
        ["java", "-jar","/${project.build.finalName}.jar"]
        
        
            
                /
                ${project.build.directory}
                ${project.build.finalName}.jar
            
        
    

相关配置说明:

  • executions.execution.phase:此处配置了在maven打包应用时构建docker镜像;
  • imageName:用于指定镜像名称,mall-tiny是仓库名称,${project.artifactId}为镜像名称,${project.version}为仓库名称;
  • dockerHost:打包后上传到的docker服务器地址;
  • baseImage:该应用所依赖的基础镜像,此处为java;
  • entryPoint:docker容器启动时执行的命令;
  • resources.resource.targetPath:将打包后的资源文件复制到该目录;
  • resources.resource.directory:需要复制的文件所在目录,maven打包的应用jar包保存在target目录下面;
  • resources.resource.include:需要复制的文件,打包好的应用jar包。

    另一种方式是通过构建shell脚本通过jenkins配置在服务器上打镜像。在此使用第二种方式,以网管为例,主要包括Dockerfile跟对应的构建脚本.sh文件。

2Dockerfile

我们以微服务中的网关为例: Dockerfile如下:

FROM cytomine/java8:latest
# 准备环境
ENV LANGUAGE=zh_CN.UTF-8
ENV TZ=Asia/Shanghai
RUN mkdir /apps/
WORKDIR /apps/
ADD target/gtc-gateway-2.3.0.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]
构建脚本

对应的网关的脚本如下:

#!/usr/bin/env bash
app_name='gtc-gateway'
images_name='gtc-gateway:1.0'
echo '----WORKSPACE----'
echo ${WORKSPACE}
cd ${app_name}
# 启动容器
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi `docker images | grep ${app_name} | awk '{print $3}'`
echo '----rm none images----'
docker build -t ${images_name} .
echo '----build images----'
docker run -p 30080:8080 --name  ${app_name} -d ${images_name}
echo '----start container----'
对应的位置

Dokcerfile跟构建脚本在同一目录下,便于我们后面通过jenkins的脚本来构建应用。

2.2、jenkins服务构建可视化配置

创建item

General

勾选:This project is parameterized->添加参数
Git Paramemter:Name:branch Parameter Type:Branch or Tag Default Value:origin/dev

源码管理

Repositories
`Repository URL:填写对应的仓库地址

Credentials:添加用户名/密码认证 ` 

Branches to build:${branch}-使用上面General定义的变量

如果此时出现如下错误:(我们的用户名跟密码是没有问题的)

原因分析:这是由于git客户端版本过低造成的!或者未安装git
Jenkins本机默认使用"yum install -y git" 安装的git版本比较低,应该自行安装更高版本的git。
查看GI版本

  git --version

如果存在,卸载低版本

  yum remove -y git

我这里是系统没有安装git,自己安装完git之后即可。

Pre Steps(增加构建步骤)
Invoke top-level Maven targets

因为后端使用maven的配置,所以此时需要配置maven进行构建,先构建共有的包到maven仓库

Maven 版本:MAVEN_HOME
目标:clean install -Dmaven.test.skip=true -Ptest
POM:${WORKSPACE}/gtc-common/pom.xml

因为需要将clean完package之后的包加入本地maven仓库 所以使用了install

Invoke top-level Maven targets

构建自身的包
Maven 版本:MAVEN_HOME
目标:clean package -Ptest
POM:${WORKSPACE}/gtc-gateway/pom.xml

Execute shell

命令

sudo -i
chmod 777 /data/jenkins/data/workspace/gtc-gateway/gtc-gateway/gtc-gateway.sh
 /data/jenkins/data/workspace/gtc-gateway/gtc-gateway/gtc-gateway.sh

3、jenkins进行微服务前端构建

前端构建前:我们需要先下载安装nginx:nginx下载地址:https://mirrors.huaweicloud.c...
首先我们需要在我们安装jenkins的服务器上安装node,地址:

https://nodejs.org/download/release/v14.18.2/
创建item

前端构建就是普通的服务构建;构建一个自由风格的项目

General

勾选:This project is parameterized->添加参数
Git Paramemter:Name:branch Parameter Type:Branch or Tag Default Value:origin/dev
Choice Paramemter: 名称:env 选项:dev stage prod 描述:前端环境
String Paramemter: 名称:deploy_dir 默认值:/data/nginx/www/html/admin 描述:前端部署位置

源码管理

填写响应的地址
Repositories

  `Repository URL:填写对应的仓库地址    
   Credentials:添加用户名/密码认证 ` 
 

Branches to build:${branch}-使用上面General定义的变量

构建

第一个 Execute shell:

 pwd
 cd gtc-system-ui
 pwd
 echo "${deploy_dir}"
 echo "env"
 echo "${env}"
 sudo -i
 pwd
 npm config get registry
 npm install
 npm run build:${env}
 pwd

第二个 Execute shell:

  if [ -d "${deploy_dir}" ];then rm -rf "${deploy_dir}"; fi;
  mkdir -p ${deploy_dir}
  cp -r ${WORKSPACE}/gtc-system-ui/dist/* ${deploy_dir}/

然后我们就可以构建,如下所示:

问题

如果在构建过程中出现如下问题:

/tmp/jenkins11995557596560651774.sh:行9: npm: 未找到命令

解决方式:我们在jenkins中配置环境变量PATH

你可能感兴趣的:(jenkins+docker进行微服务部署)