关于docker:jenkinsdocker进行微服务部署

34次阅读

共计 4986 个字符,预计需要花费 13 分钟才能阅读完成。

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 的依赖:

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.1.0</version>
    <executions>
        <execution>
            <id>build-image</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <imageName>mall-tiny/${project.artifactId}:${project.version}</imageName>
        <dockerHost>http://192.168.3.101:2375</dockerHost>
        <baseImage>java:8</baseImage>
        <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]
        </entryPoint>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>

相干配置阐明:

  • 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

正文完
 0