共计 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