容器化Jenkins远程发布java应用(方式一:pipline+ssh)

1.创建pipline工程

2.准备工程Jenkinsfile文件(java目录)

1.文件脚本内容

env.fileName = "planetflix-app.jar"
env.configName = "planetflix_prod"
env.remoteDirectory = "/data/project/java"
env.sourceFile = "/var/jenkins_home/workspace/release_planetxflix_pipline/planetflix-api/target/${env.fileName}"
env.shellName="devops.sh"
env.shellDirectory = "/home/planetflix/shell"pipeline{agent any//定义流水线的加工流程stages {stage('打JAR包') {steps {sh label:'',script: 'mvn clean package -Dmaven.test.skip=true'}}stage('推送部署文件到远程服务器') {steps {sh """cp -f ${env.sourceFile} ./"""sshPublisher(publishers: [sshPublisherDesc(configName: "${env.configName}", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'echo "...成功推送planetflix-app.jar..."', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: "${env.remoteDirectory}", remoteDirectorySDF: false, removePrefix: '', sourceFiles: "${env.fileName}")], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])echo '推送成功'}}stage('运行部署') {steps { sshPublisher(publishers: [sshPublisherDesc(configName: "${env.configName}", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand:"sh ${env.shellDirectory}/${env.shellName}", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])echo "部署完成"}}}
}

2.devops.sh文件

#!/bin/bash#服务名称
SERVER_NAME=planetflix-app
#端口信息
PORT=10021
# 镜像tag
IMAGE_TAG=1.0.0-SNAPSHOT#dockerFile存放路径
DOCKER_PATH=/home/planetflix/shell
#容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $SERVER_NAME}')
#镜像id
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')# 构建docker镜像
function build(){if [ -n "$IID" ]; thenecho "存在$SERVER_NAME镜像,IID=$IID"elseecho "不存在$SERVER_NAME镜像,开始构建镜像"cd $DOCKER_PATHecho "------ 开始构建镜像:${SERVER_NAME} ------"docker build -t $SERVER_NAME:$IMAGE_TAG -f Dockerfile . --no-cachefi
}
build
# 运行docker容器
if [[ -n $(docker ps -q -f "name=^${SERVER_NAME}$") ]];thenecho "------ 容器正在运行:${SERVER_NAME} ------"echo "------ 停止容器:$SERVER_NAME ------"docker stop $SERVER_NAMEecho "------ 删除容器:$SERVER_NAME ------"docker rm $SERVER_NAME
elseecho "------ 容器未在运行:${SERVER_NAME} ------"echo "------ 删除容器:$SERVER_NAME ------"docker rm $SERVER_NAME
fiecho "------ docker run创建$SERVER_NAME容器 ------"
docker-compose -f /home/planetflix/compose/app.yml --compatibility up -d
echo "------ $SERVER_NAME容器创建完成 ------"

3.app.yml(docker-compose)

version: '3'
#统一管理服务
services:
#数据库服务app:container_name: planetflix-appimage: planetflix-app:1.0.0-SNAPSHOTports:- 10021:10021restart: alwaysnetworks:- mid_networkvolumes:- /data/project/java/logs:/data/project/java/logs- /data/project/java/planetflix-app.jar:/data/project/java/planetflix-app.jar
networks:mid_network:

4.Java服务Dockerfile

# 使用 OpenJDK 17 的 slim 版本作为基础镜像
FROM openjdk:17-jdk-slimMAINTAINER yangyanwei "yanwei_0818@163.com"# 设置镜像的时区,避免出现8小时的误差
ENV TZ=America/New_York# 合并 RUN 命令,清理不需要的缓存
RUN set -eux; \apt-get update; \apt-get install -y --no-install-recommends \tzdata \; \cp /usr/share/zoneinfo/$TZ /etc/localtime; \echo "$TZ" > /etc/timezone; \apt-get clean; \rm -rf /var/lib/apt/lists/*# 容器暴露的端口号和 Spring Boot 的 yml 文件暴露的端口号要一致
EXPOSE 10021ENV JAVA_OPTS  "-Xms512m -Xmx512m --add-opens java.base/java.lang=ALL-UNNAMED"ENV SPRING_PROFILES_ACTIVE test# 设置工作目录
WORKDIR /data/project/java# 复制项目 JAR 文件
COPY target/planetflix-app.jar /data/project/java/planetflix-app.jar# 使用 ENTRYPOINT 代替 CMD
CMD ["/bin/sh", "-c", "java $JAVA_OPTS -Dname=planetflix-app -Dfile.encoding=UTF-8 -jar /data/project/java/planetflix-app.jar  --spring.profiles.active=$SPRING_PROFILES_ACTIVE"]

3.配置工程git访问,填写Jenkinsfile文件路径

4.配置远程服务器ssh访问

系统管理>系统配置>

可以通过生成ssh公钥密钥,远程连接ecs密码连接保存

5.构建工程成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/9337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode - 周赛396

目录 一,3136. 有效单词 二,3137. K 周期字符串需要的最少操作次数 三,3138. 同位字符串连接的最小长度 四,3139. 使数组中所有元素相等的最小开销 一,3136. 有效单词 本题就是一道阅读理解题: 字符串长…

NSSCTF | [SWPUCTF 2021 新生赛]easy_sql

打开题目,提示输入一些东西,很显眼的可以看到网站标题为“参数是wllm” 首先单引号判断闭合方式 ?wllm1 报错了,可以判断为单引号闭合。 然后判断字节数(注意‘--’后面的空格) ?wllm1 order by 3-- 接着输入4就…

vue多选功能

废话不多说&#xff0c;直接上代码&#xff01;&#xff01;&#xff01; <template><div class"duo-xuan-page"><liv-for"(item, index) in list":key"index"click"toggleSelection(item)":class"{ active: sel…

ue引擎游戏开发笔记(36)——为射击落点添加特效

1.需求分析&#xff1a; 在debug测试中能看到子弹落点后&#xff0c;需要给子弹添加击中特效&#xff0c;更真实也更具反馈感。 2.操作实现&#xff1a; 1.思路&#xff1a;很简单&#xff0c;类似开枪特效一样&#xff0c;只要在头文件声明特效变量&#xff0c;在fire函数中…

Leetcode—232. 用栈实现队列【简单】

2024每日刷题&#xff08;131&#xff09; Leetcode—232. 用栈实现队列 实现代码 class MyQueue { public:MyQueue() {}void push(int x) {st.push(x);}int pop() {if(show.empty()) {if(empty()) {return -1;} else {int ans show.top();show.pop();return ans;}} else {i…

Burp Suite 抓包,浏览器提示有软件正在阻止Firefox安全地连接到此网站

问题现象 有软件正在阻止Firefox安全地连接到此网站 解决办法 没有安装证书&#xff0c;在浏览器里面安装bp的证书就可以了 参考&#xff1a;教程合集 《H01-启动和激活Burp.docx》——第5步

金蝶BI应收分析报表:关于应收,这样分析

这是一张出自奥威-金蝶BI方案的BI应收分析报表&#xff0c;是一张综合运用了筛选、内存计算等智能分析功能以及数据可视化图表打造而成的BI数据可视化分析报表&#xff0c;可以让企业运用决策层快速知道应收账款有多少&#xff1f;账龄如何&#xff1f;周转情况如何&#xff1f…

ARTS Week 27

Algorithm 本周的算法题为 58. 最后一个单词的长度 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1&#xff1a;输入&#xff1a…

JAVA基础面试题(第十一篇)上! JVM

Hello好久不见&#xff01;&#xff0c;最近我们讲更新JVM部分的面试题。 JVM 这块比较难理解&#xff0c;而且也是不擅长的点。所以今天我更新一下JVM希望小伙伴们能在面试中取得好成绩&#xff01; JVM 1. 什么是JVM内存结构&#xff1f; jvm将虚拟机分为5大区域&#xff0…

上市公司-库存周转率、供应链效率明细数据集(2000-2022年)

01、数据介绍 库存周转率是衡量企业库存管理效率的关键指标之一&#xff0c;它反映了企业库存的流转速度。而供应链效率则体现了企业在整个供应链管理中的表现&#xff0c;包括采购、生产、物流等环节的协同和优化。 提高库存周转率和供应链效率是上市公司优化企业运营和管理…

ICode国际青少年编程竞赛- Python-2级训练场-识别循环规律2

ICode国际青少年编程竞赛- Python-2级训练场-识别循环规律2 1、 for i in range(3):Dev.step(3)Dev.turnRight()Dev.step(4)Dev.turnLeft()2、 for i in range(3):Spaceship.step(3)Spaceship.turnRight()Spaceship.step(1)3、 Dev.turnLeft() Dev.step(Dev.x - Item[1].…

编译和链接(超详细)

✅博客主页:爆打维c-CSDN博客​​​​​​ &#x1f43e; &#x1f539;分享c语言知识及代码 一、编译和链接实例 假设我们有一个名为main.c的C语言源文件&#xff0c;它包含了一个简单的Hello World程序。我们可以使用gcc编译器对该源文件进行编译&#xff0c;生成一个可执行…

AI大模型探索之路-训练篇18:大语言模型预训练-微调技术之Prompt Tuning

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

亚马逊是如何铺设多个IP账号实现销量大卖的?

一、针对亚马逊平台机制&#xff0c;如何转变思路&#xff1f; 众所周知&#xff0c;一个亚马逊卖家只能够开一个账号&#xff0c;一家店铺&#xff0c;这是亚马逊平台明确规定的。平台如此严格限定&#xff0c;为的就是保护卖家&#xff0c;防止卖家重复铺货销售相同的产品&a…

【读论文】Gaussian Grouping: Segment and Edit Anything in 3D Scenes

Gaussian Grouping: Segment and Edit Anything in 3D Scenes 文章目录 Gaussian Grouping: Segment and Edit Anything in 3D Scenes1. What2. Why3. How3.1 Anything Mask Input and Consistency3.2 3D Gaussian Rendering and Grouping3.3 Downstream: Local Gaussian Editi…

10000 字详细讲解 Spring 中常用注解及其使用

如下图京东购物页面&#xff0c;当我们选择点击访问某一类商品时&#xff0c;就会向后端发起 HTTP 请求&#xff0c;当后端收到请求时&#xff0c;就会找到对应的代码逻辑对请求进行处理&#xff0c;那么&#xff0c;后端是如何来查找处理请求相对应的代码呢&#xff1f;答案就…

计算机考研|25人太难了,408会炸,还是自命题会炸?

自命题已经不是炸不炸的问题了&#xff0c;是有没有学上的问题。 我记得去年九月一些学校宣布改考408的时候&#xff0c;整个群里都炸了&#xff0c;同学一片哀嚎。要知道九月的时候要重新准备408肯定是不可能了&#xff0c;一来408复习的基础阶段已经过去了&#xff0c;二来英…

人工智能哪些大学比较好

人工智能领域的大学有很多&#xff0c;以下是一些国际上被广泛认可的一流大学&#xff1a; 1. **斯坦福大学&#xff08;Stanford University&#xff09;** - 位于美国加州的斯坦福大学拥有顶尖的人工智能研究中心&#xff0c;并在机器学习、自然语言处理等领域处于领先地位。…

phpstudy(MySQL启动又立马停止)问题的解决办法

方法一&#xff1a;查看本地安装的MySQL有没有启动 1.鼠标右击开始按钮选择计算机管理 2.点击服务和应用程序 3.找到服务双击 4.找到MySQL服务 5.双击查看是否启动&#xff0c;如启动则停止他&#xff0c;然后确定&#xff0c;重新打开phpstudy,启动Mysql. 方法二&#xff…

[鸟哥私房菜]4.首次登录与在线求助

第4章 首次登录与在线求助 4.1.3 X Window 与命令行模式的切换 通常我们称命令行界面为终端界面、Terminal 或 Console。Linux 默认的情况下会提供六个终端&#xff08;Terminal&#xff09;来让用户登录&#xff0c; 切换的方式为使用&#xff1a;[Ctrl] [Alt] [F1]~[F6] …