SpringCloud+Docker+Jenkins,真牛

4.2.3 env环境变量文件
  • 用于设置环境动态参数,文件是以.env为格式

JAVA_OPTS_DEFAULT=-Xmx512m

4.2.4 Dockerfile打包工程镜像细讲
  • 以开发环境的Dockerfile为例,如果是测试环境则,把所有路径包含springboot_dev改成springboot_test

FROM frolvlad/alpine-oraclejdk8:slim

MAINTAINER jilongliang@sina.com

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

RUN mkdir -p /home/devsoft/springboot_dev

WORKDIR /home/devsoft/springboot_dev

EXPOSE 7011

ADD ./target/springboot.jar ./

CMD java ${JAVA_OPTS_DEFAULT} -Djava.security.egd=file:/dev/./urandom -jar springboot.jar

  • 参数说明

  • WORKDIR 工作目录说明进入容器此时会有一个.jar是在Dockerfile的ADD添加进去

docker exec -it 容器名称或容器id /bin/sh

或要使用sh和bash要看COMMAND,-it

docker exec -it 容器名称或容器id/bin/bash

4.2.5 build.sh文件shell脚本详解

注意点1:经过测试动态变量的【等号】不能有空格和tab键置位,否则获取不了值,而且在shell脚本代码里面不支持空格格式化,支持tab置位格式化。在终端(ssh软件端)或Jenkins客户端shell命令,『位置变量』的参数以空格隔开。

如:sh build.sh 192.168.1.235 springboot 0.0.1 7011 /home/jenkins/workspace/springboot_dev

$IMG_NAME:$IMG_VERSION这个IMG_VERSION版本(tag)参数不指定默认latest

注意点2:通常情况下Docker是默认执行Dockerfile,但是可以自定义后缀文件进行编译,前提必须要-f(force)强制指定文件进行运行

#!/usr/bin/env bash

# 动态变量的【等号】不能有空格和tab键置位,否则获取不了值,而且在shell脚本代码里面不支持空格格式化,支持tab置位格式化。

# 在终端(ssh软件端)或Jenkins客户端shell命令,参数以空格隔开。如:sh build.sh 192.168.1.235 springboot 0.0.1 7011 /home/jenkins/workspace/springboot_dev

IMG_SERVER=“$1”

IMG_NAME=“$2”

IMG_VERSION=“$3”

IMG_PORT=“$4”

RUN_EVN=“$5”

IMG_PATH=“$6”

echo “服务地址:$IMG_SERVER”

echo “工程镜像名称:$IMG_NAME”

echo “工程版本号:$IMG_VERSION”

echo “工程端口:$IMG_PORT”

echo “服务环境:$RUN_EVN”

#私服访问url路径和编译之后镜像文件存放到指定路径固定,不动态参数进行处理传值.

REGISTRY_URL=“192.168.1.235:5000”

IMG_TAR_GZ_PATH=“/home/img_tar_gz_path/”

# 判断动态参数不为空字符串的时候才执行下面操作

if [ “KaTeX parse error: Expected 'EOF', got '&' at position 21: …ERVER" != "" ] &̲& [ "IMG_NAME” != “” ] && [ “KaTeX parse error: Expected 'EOF', got '&' at position 22: …RSION" != "" ] &̲& [ "IMG_PORT” != “” ]; then

echo " …进入删除  Container & Images 操作 …"

# 清理虚悬镜像,释放磁盘空间

#docker images|grep none|awk ‘{print $3 }’|xargs docker rmi

# 获取容器ID

CONTAINER_ID=docker ps -a | grep $IMG_NAME | awk '{ print $1 }'

# 获取镜像ID

IMAGE_ID=docker images | grep $IMG_NAME | awk '{ print $3 }'

# 判断是否存在删除开发容器

if [[ “$CONTAINER_ID” != “” ]]; then

docker rm -f $CONTAINER_ID

fi

# 判断是否存在删除开发镜像

if [[ “$IMAGE_ID” != “” ]]; then

docker rmi -f $IMAGE_ID

fi

I M G N A M E : IMG_NAME: IMGNAME:IMG_VERSION 这个IMG_VERSION版本(tag)参数不指定默认latest,通过不同参数执行不同环境文件

# -f 表示强制指定Dockerfile文件进行编译

echo " …进入Building & Images 操作 … "

#方法1、指定不同文件存放默认的Dockerfile,使用-f进行强制编译

#docker build -t  I M G N A M E : IMG_NAME: IMGNAME:IMG_VERSION -f  I M G P A T H " e n v / " IMG_PATH"env/" IMGPATH"env/"RUN_EVN/Dockerfile $IMG_PATH

#方法2、跟据不同Dockerfile文件的后缀进行编译不同环境的文件

docker build -t  I M G N A M E : IMG_NAME: IMGNAME:IMG_VERSION -f KaTeX parse error: Expected group after '_' at position 25: …env/"Dockerfile_̲RUN_EVN $IMG_PATH

# 将镜像打一下标签,然后安照标签进行推送到私服里面,标签名就以服务名即可

docker tag  I M G N A M E : IMG_NAME: IMGNAME:IMG_VERSION  R E G I S T R Y U R L / REGISTRY_URL/ REGISTRYURL/IMG_NAME:$IMG_VERSION

# 推镜像到私服里面

docker push  R E G I S T R Y U R L / REGISTRY_URL/ REGISTRYURL/IMG_NAME:$IMG_VERSION

# 判断是否存在文件夹

if [ -d “$IMG_PATH” ];then

echo “已经存在:”$IMG_PATH

else

mkdir -p $IMG_PATH

fi

# 保存编译之后镜像文件存放到指定路径

docker save  I M G N A M E   − o   IMG_NAME -o  IMGNAME o IMG_TAR_GZ_PATH/$IMG_NAME.tar.gz

echo " …进入Runing操作 …"

docker run -d --network default_network --restart=always --env-file=./.env  -e spring.profiles.active= R U N E V N   − − e x p o s e = RUN_EVN --expose= RUNEVN expose=IMG_PORT --name= I M G N A M E    − p   IMG_NAME  -p  IMGNAME  p IMG_PORT: I M G P O R T   IMG_PORT  IMGPORT IMG_NAME:$IMG_VERSION

echo " …Build & Run Finish Success~…"

else

echo " …Illegal Command Operation …"

fi

4.2.6 Docker (save、load、tag、push,pull)命令使用
  • 其中push,pull一个是推,一个是拉,在某种程度下,都是对在私服上面的镜像进行操作

  • docker save命令是保存编译的tar.gz或tar压缩文件,语法如:

docker save 镜像名 -o 路径/镜像名.tar.gz

docker save 镜像名 -o 路径/镜像名.tar

docker load 命令是用于导入使用 docker save 命令导出的镜像,此命令非常重要,由于有些客户要求项目工程要求部署在内网,此时这个命令在无网络的内网情况下部署项目的时候就体现它重要的地位了.语法 docker load [OPTIONS],在加载的过程有点慢,因为文件有点大,其中显示Loady Layer [======]输出信息,证实镜像是分层关系。

docker load -i /home/img_tar_gz_path/springboot.tar.gz

  • 参数说明

  • docker tagdocker push命令是一起结合使用,先tag后push,每个镜像名和版本是以冒号区分,而docker pull根据情况使用.

# 将镜像打一下标签,然后安照标签进行推送到私服里面,标签名就以服务名即可

docker tag 镜像名:版本号 私服路径/镜像名:版本号

# 推镜像到私服里面

docker push私服路径/镜像名:版本号

  • 查看镜像

浏览器验证docker push推送上私服的镜像

4.2.7 虚悬镜像
  • 在docker编译不成功会或者是新版本覆盖旧版本归类为虚悬镜像,生成这个个镜像既没有仓库名,也没有标签,均为 <none>。一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的。

4.2.8 不同环境的配置文件

配置参数

不同环境配置参数内容

server:

port: 7011

runEvn: ‘开发环境’

server:

port: 7011

runEvn: ‘测试环境’

4.2.9 Controller测试代码

@RestController

public class SimpleController {

//读取配置动态参数

@Value(“${runEvn}”)

private String runEvn;

@GetMapping(“/test”)

public String test() {

return “this spring boot " + runEvn +” date long "

+ System.currentTimeMillis();

}

}

5、非多台机器免密远程登录&Jenkins部署详解


5.1 特别说明
  • 以开发环境为例子进行说明

  • 开发环境部署目标机器是与Jenkins机器同一台机器,一般情况,Jenkins是单独一台机器,这里为了节省自身电脑内存,故放在同一台机器进行演示与学习。

5.2 新建maven工程
  • 点击Jenkins的新建任务菜单

5.3 参数化构建过程说明
5.3.1添加参数

5.3.2 参数说明以开发环境为案例

5.3.3 源码管理

5.3.4 Build编译设置

表示忽略测试单元类进行编译

clean install -U -Dmaven.test.skip=true

5.4 SSH Publishers设置
  • 其中SSH Server Name就是在http://jenkins地址:端口/jenkins/configure设置好进行选择

  • Transfer Set Source file传输文件的路径,可以使用参数构建的占位符${serverPath}获取

  • Remote directory远程文件目录,同理也参数构建的占位符${serverPath}获取

  • SSH Publishers shell脚本#!/bin/bash表示告诉终端使用bash解析器进行执行,而且只有第一行bash才有效。

#!/bin/bash

# 创建目录

mkdir -p ${serverPath}

# 切换目录

cd ${serverPath}

# 运行脚本

sh build.sh   s e r v e r    server   server  {appName}   v e r s i o n    {version}   version  {port}  e n v   {env}  env {serverPath}

5.5 构建与编译部署项目
  • 截图的构建参数都是在参数化构建过程配置的参数

5.6 构建&运行&&部署结果
  • 构建过程

  • 部署结果

5、多台机器免密远程登录&Jenkins部署流程详解


6.1 特别说明
  • 以测试环境为例子进行说明

  • 步骤流程几乎一样,唯一是在SSH Publishers 和源码存放路径不一样,测试环境部署目标机器是与Jenkins机器不同一台机器

6.2 新建maven工程
  • 点击Jenkins的新建任务菜单

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

分享

1、算法大厂——字节跳动面试题

2、2000页互联网Java面试题大全

3、高阶必备,算法学习

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-wb9Ymn8f-1711084491229)]
[外链图片转存中…(img-cfdN3X5a-1711084491230)]
[外链图片转存中…(img-Z5KbcYqE-1711084491231)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-j39FddYr-1711084491231)]

分享

1、算法大厂——字节跳动面试题

[外链图片转存中…(img-W9Jgm6u4-1711084491232)]

2、2000页互联网Java面试题大全

[外链图片转存中…(img-z877N6BJ-1711084491233)]

3、高阶必备,算法学习

[外链图片转存中…(img-p4DZUrht-1711084491233)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值