Jenkins自动化部署docker

news/2024/7/27 21:33:24/文章来源:https://blog.csdn.net/weixin_46533577/article/details/135586448

Jenkins自动化部署docker和普通方式构建

docker外挂目录

  1. 准备测试服务器docker环境
  2. 准备jdk环境
  3. 将上传jar包修改为app.jar
  4. 对外暴露1000端口
  5. 启动jar
FROM openjdk:8-jdk-alpine
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
EXPOSE 1000
ENTRYPOINT ["java","-jar", "/app.jar"]

制作镜像

将上传的镜像先测试,我的jar包叫sky-server-1.0-SNAPSHOT.jar先将这个做成镜像

docker build --build-arg JAR_FILE=app.jar -t sky .

创建容器

将之前做的镜像运行

docker run -di -p 1000:8080 sky:v1 

环境搭建

环境准备

前提需要Jenkins和Gitea这个要提前准备好。

1、配置Jenkins的Maven目录
下载Maven

下载地址在这:https://maven.apache.org/download.cgi

下载二进制文件就行,不要下载源码。

在这里插入图片描述

配置maven环境

因为墙的原因,所以部分内容改成国内镜像,还要设置包下载目录

我在公用目录中创建一个新的文件夹,因为那个目录中文件太多了不好操作

[root@bunny jenkins_home]# mkdir plugin
[root@bunny jenkins_home]# cd plugin
[root@bunny plugin]# pwd
/data/jenkins_home/plugin

之后将下载好的Maven拖到这个目录下等会去解压,我下的是版本是3.9.6

在这里插入图片描述

解压Maven

解压安装包,并重命名,本来的名字有点长

# 解压
tar -xzf apache-maven-3.9.6-bin.tar.gz 
# 重命名
mv apache-maven-3.9.6 maven
配置国内镜像

进入到/data/jenkins_home/plugin/maven/conf/目录

cd /data/jenkins_home/plugin/maven/conf/

找到settings.xml编辑

在这里插入图片描述

将镜像改为阿里云

<mirror><id>alimaven</id><name>Aliyun Maven</name><url>https://maven.aliyun.com/repository/public</url><mirrorOf>central</mirrorOf>
</mirror>

在这里插入图片描述

下载目录就放在/data/jenkins_home/plugin/maven/maven_reo

<localRepository>/data/jenkins_home/plugin/maven/maven_reo</localRepository>

全部的配置参考

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.3.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.3.0 https://maven.apache.org/xsd/settings-1.3.0.xsd"><localRepository>/data/jenkins_home/plugin/maven/maven_reo</localRepository> <mirrors><mirror><id>alimaven</id><name>Aliyun Maven</name><url>https://maven.aliyun.com/repository/public</url><mirrorOf>central</mirrorOf></mirror></mirrors><repositories><repository><id>central</id><name>Central Repository</name><url>https://repo.maven.apache.org/maven2</url><snapshots><enabled>false</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>central</id><name>Central Repository</name><url>https://repo.maven.apache.org/maven2</url><snapshots><enabled>false</enabled></snapshots></pluginRepository></pluginRepositories>
</settings>
安装Jenkins

在配置Jenkins时我将目录映射到了本机和容器中/data/jenkins_home

如果之前你也下载过了,找到对应位置即可

docker run -u root -d --name myjenkins \
-p 8040:8080 -p 50000:50000 \
-v /data/jenkins_home:/var/jenkins_home \
--restart=always jenkinsci/blueocean
配置Jenkins中Maven目录
/data/jenkins_home/plugin/maven/conf/settings.xml

在本机将Maven配置到全局,这个看自己需求,如果之后打算在本机使用Maven就是在docker使用就不用这样了

ln -s /data/jenkins_home/plugin/maven/bin/mvn /usr/local/bin/mvn

在这里插入图片描述

因为之前配置的本地环境映射到docker容器中的,当时我们的目录是/data/jenkins_home但是在docker中是/var/jenkins_home需要非常的注意!!!需要非常的注意!!!需要非常的注意!!!

在这里插入图片描述

之后配置/var/jenkins_home/plugin/maven目录是这个不是/data开头的了!!!

在这里插入图片描述

验证安装

在本地环境:

ln -s /data/jenkins_home/plugin/maven/bin/mvn /usr/local/bin/mvn
mvn --version

在这里插入图片描述

在docker环境:

ln -s /var/jenkins_home/plugin/maven/bin/mvn /usr/local/bin/mvn
mvn --version

在这里插入图片描述

2、配置邮箱发送

点击这个

在这里插入图片描述

这里填写你的邮箱

在这里插入图片描述

设置Extended E-mail Notification

点击高级,添加用户

在这里插入图片描述

密码填写授权码,因为QQ是用授权码的。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

之后将授权码填到密码中

在这里插入图片描述

点击下拉框选择即可,需要勾选Use SSL因为QQ是使用SSL登录的

在这里插入图片描述

配置邮件通知,在下面选择发送人的邮箱。

在这里插入图片描述

3、安装web钩子

安装web钩子插件,如果后期需要使用git推送时触发,需要安装web钩子

在这里插入图片描述

4、安装邮件发送

名称为:Email Extension

在这里插入图片描述

实战案例

使用Jenkins部署SpringBoot项目,两种方式

  1. 普通构建方式
  2. docker构建方式

这里使用的是gitea托管,使用web钩子的方式,当代码提交时自动打包并运行(使用Jenkins),我的Jenkins和gitea都是装在docker中的。

普通方式构建

环境初始化

将写好的SpringBoot项目自动化部署到Jenkins。

构建Maven项目

在这里插入图片描述

添加用户

在这里插入图片描述

在这里插入图片描述

构建环境建议勾选这个

在这里插入图片描述

token可以随便填,按自己需要

在这里插入图片描述

之后点击保存

开始构建

先看下是否可以构建成功,成功后再做运行相关操作。

在这里插入图片描述

控制台输出,看到这个基本可以放心一半这样了。

在这里插入图片描述

构建成功

在这里插入图片描述

配置邮件发送相关

邮件模板,在映射目录下也就是本机创建目录,

[root@bunny conf]# mkdir -p  /data/jenkins_home/email-templates
[root@bunny conf]# cd /data/jenkins_home/email-templates/

将下面的命名为eamil.html具体名字你自己定义。

这个模板可以自定义的,这是第一种模板

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head><body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"offset="0"><table width="95%" cellpadding="0" cellspacing="0"style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"><tr><td>(本邮件是程序自动下发的,请勿回复!)</td></tr><tr><td><h2><font color="#0000FF">构建结果 - ${BUILD_STATUS}</font></h2></td></tr><tr><td><br /><b><font color="#0B610B">构建信息</font></b><hr size="2" width="100%" align="center" /></td></tr><tr><td><ul><li>项目名称 : ${PROJECT_NAME}</li><li>构建编号 : 第${BUILD_NUMBER}次构建</li><li>SVN 版本: ${SVN_REVISION}</li><li>触发原因: ${CAUSE}</li><li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li><li>构建  Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li><li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li><li>项目  Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li></ul></td></tr><tr><td><b><font color="#0B610B">Changes Since LastSuccessful Build:</font></b><hr size="2" width="100%" align="center" /></td></tr><tr><td><ul><li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li></ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat="    %p"}</td></tr><tr><td><b>Failed Test Results</b><hr size="2" width="100%" align="center" /></td></tr><tr><td><prestyle="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre><br /></td></tr><tr><td><b><font color="#0B610B">构建日志 (最后 100行):</font></b><hr size="2" width="100%" align="center" /></td></tr><!-- <tr><td>Test Logs (if test has ran): <ahref="${PROJECT_URL}ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip">${PROJECT_URL}/ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip</a><br /><br /></td></tr> --><tr><td><textarea cols="80" rows="30" readonly="readonly"style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea></td></tr></table>
</body>
</html>

这是第二种模板

<hr/>(自动化构建邮件,无需回复!)<br/><hr/>
项目名称:$PROJECT_NAME<br/><br/>项目描述:$JOB_DESCRIPTION<br/><br/>运行编号:$BUILD_NUMBER<br/><br/>运行结果:$BUILD_STATUS<br/><br/>触发原因:${CAUSE}<br/><br/>构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><br/>构建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><br/>详情:${JELLY_SCRIPT,template="html"}<br/>
<hr/>

之后点击测试,名称目录就是你取得到名字,我就不一一测试了。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如果上述觉得这个格式可以将代码可以将这个代码粘贴到邮件发送的这里面

在这里插入图片描述

在构建中添加邮件构建

在这里插入图片描述

因为上面填写的是HTML模板

在这填写的是这个在这里插入图片描述

当然也可以发送附件,这个附件内容需要在工作空间中的,也就是在这里

在这里插入图片描述

为了测试附件我就随便选一个。

在这里插入图片描述

设置接受邮件人和回复邮件人,使用逗号分隔,如果选择的html模板发送的在下面还需要勾选Content Type
为html格式。

在这里插入图片描述

在这里插入图片描述

点击立即构建,会发送邮件

在这里插入图片描述

构建成功运行项目

构建完成后执行脚本

在这里插入图片描述

查看本地的文件

在这里插入图片描述

之后构建完成后执行这个目录的jar包

cd /data/jenkins_home/workspace/sky-take-out/sky-server/target
mkdir -p /data/jenkins_home/workspace/sky-take-out/logs
nohup java -jar app.jar --server.port=1000 > /data/jenkins_home/workspace/sky-take-out/logs/app.log 2>&1 &

需要再全局配置中添加

在这里插入图片描述

在这里插入图片描述

在gitea中点击设置,添加web钩子

在这里插入图片描述

推送失败

在这里插入图片描述

解决方式

之后重启gitea

修改 /data/gitea/conf/app.ini 配置文件[webhook]
ALLOWED_HOST_LIST = 你的IP

在这里插入图片描述

可以了

在这里插入图片描述

访问页面,可以访问只是路径不对

在这里插入图片描述

使用docker方式构建

docker相关指令

停止指定所有容器
docker stop sky
docker rm sky
删除指定所有镜像
docker stop $(docker ps -a | grep "Exited" | awk '{print $1 }')  #停止容器
docker rm $(docker ps -a | grep "Exited" | awk '{print $1 }')     #删除容器
docker rmi $(docker images | grep "none" | awk '{print $3}')    #删除镜像

开始构建

基础步骤

和上面构建方式差不多,只是要在目录下新建dockerfile

在这里插入图片描述

在之前的gitea中新增一个钩子

在这里插入图片描述

新建一个Maven项目

在这里插入图片描述

配置和之前都差不多只是web钩子改成这个sky-take-out-docker

在这里插入图片描述

如果还想使用发送邮件配置还是和上面一样。

区别步骤
dockerfile内容
FROM openjdk:8-jdk-alpine
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
EXPOSE 1000
ENTRYPOINT ["java","-jar", "/app.jar"]
构建前操作

因为是使用docker构建需要删除之前的镜像和容器所以在构建时需要添加构建前操作

执行脚本,和上面的一样,因为是在容器中需要向容器外的本机发送指令

docker stop sky_jar 
docker rm sky_jar 
docker rmi $(docker images | grep "sky" | awk '{print $3}') cp /data/jenkins_home/workspace/sky-take-out-docker/dockerfile /data/jenkins_home/workspace/sky-take-out-docker/sky-server/target/dockerfilecd /data/jenkins_home/workspace/sky-take-out-docker/sky-server/target
docker build --build-arg JAR_FILE=app.jar -t sky .
docker run -di -p 2000:8080 --name sky_jar sky 

为了和上面的区分将端口改为2000

INT [“java”,“-jar”, “/app.jar”]


##### 构建前操作因为是使用docker构建需要删除之前的镜像和容器所以在构建时需要添加构建前操作执行脚本,和上面的一样,因为是在容器中需要向容器外的本机发送指令```sh
docker stop sky_jar 
docker rm sky_jar 
docker rmi $(docker images | grep "sky" | awk '{print $3}') cp /data/jenkins_home/workspace/sky-take-out-docker/dockerfile /data/jenkins_home/workspace/sky-take-out-docker/sky-server/target/dockerfilecd /data/jenkins_home/workspace/sky-take-out-docker/sky-server/target
docker build --build-arg JAR_FILE=app.jar -t sky .
docker run -di -p 2000:8080 --name sky_jar sky 

为了和上面的区分将端口改为2000

在这里插入图片描述

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

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

相关文章

搭建知识付费小程序平台:如何避免被坑,选择最佳方案?

随着知识经济的兴起&#xff0c;知识付费已经成为一种趋势。越来越多的人开始将自己的知识和技能进行变现&#xff0c;而知识付费小程序平台则成为了一个重要的渠道。然而&#xff0c;市面上的知识付费小程序平台琳琅满目&#xff0c;其中不乏一些不良平台&#xff0c;让老实人…

(学习日记)2024.01.09

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

CSS 下载进度条

<template><view class=btn>下载中</view></template><script></script><style>/* 设置整个页面的样式 */body {width: 100vw; /* 页面宽度为视口宽度 */background: #000000; /* 背景颜色为白色 */display: flex; /* 使用 flex…

领导看了就给我升职加薪的年终总结,我只花5分钟就写完了!

年末正是做总结的时候&#xff0c;如果你正苦于年终总结不知道该如何下手&#xff0c;ProcessOn刚好上线了AI一键帮你生成年终总结的活动&#xff0c;还可以下载成PPT格式&#xff0c;或许可以助你一臂之力&#xff0c;操作起来十分简单。当然&#xff0c;计划也可以一键生成&a…

Linux 内核大转变:是否将迈入现代 C++ 的时代?

Linux开发者 H. Peter Anvin 在邮件列表中重启了关于 Linux内核C代码转换为C的讨论&#xff0c;并陈述了自己的观点。说之前先看一下这个话题的历史背景。 早在2018年4月1日&#xff0c;Andrew Pinski提议将 Linux 内核源码转为 C&#xff0c;在文中写道之所以引入是由于以下优…

2023 年公链发展报告

作者&#xff1a;stellafootprint.network 2023 年&#xff0c;公链领域展现出强大的韧性和持续的创新力。这一年&#xff0c;比特币的强势回归、以太坊的稳步增长以及 Solana 的惊人崛起&#xff0c;共同绘制出一幅市场复苏的生动画面。在这一背景下&#xff0c;公链加密货币…

Springboot + websocket 实现 一对一 单人聊天

Springboot websocket 实现 一对一 单人聊天 要使用websocket ,需要添加 jar 打开项目中的pom.xml,添加以下内容 创建java端代码 配置websocke的endpoints 配置websocket的server ServerEndpoint(value "/websocket/{username}") 这句话 一定要注意, 这里 路…

计算机毕业设计 基于Java的国产动漫网站的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

使用swift创建第一个ios程序

一、安装xcode 先到app store中下载一个Xcode app 二、创建项目 1、项目设定 创建ios app 2、工程结构 三、修改代码实现按键联动 四、运行测试

Arduino快速上手esp32方案开发

一、什么是ESP32&#xff1f; ESP32是Espressif Systems推出的一款高性能、低功耗的Wi-Fi和蓝牙双模系统级芯片&#xff08;SoC&#xff09;&#xff0c;广泛应用于物联网、智能家居、可穿戴设备等领域。它基于极低功耗的Tensilica Xtensa LX6微处理器&#xff0c;并集成了丰富…

云计算概述(发展过程、定义、发展阶段、云计算榜单)(一)

云计算概述&#xff08;一&#xff09; &#xff08;发展过程、定义、发展阶段、云计算榜单&#xff09; 本文目录&#xff1a; 零、00时光宝盒 一、前言 二、云计算的发展过程 三、云计算的定义 四、云计算发展阶段 五、云计算公司榜单看云计算兴衰 六、参考资料 零、0…

C++ 设计模式之组合模式

【声明】本题目来源于卡码网&#xff08;题目页面 (kamacoder.com)&#xff09; 【提示&#xff1a;如果不想看文字介绍&#xff0c;可以直接跳转到C编码部分】 【简介】什么是组合模式 组合模式是⼀种结构型设计模式&#xff0c;它将对象组合成树状结构来表示“部分-整体”的…

自动化神器 Playwright 的 Web 自动化测试解决方案

1. 主流框架的认识 总结&#xff1a; 由于Selenium在3.x和4.x两个版本的迭代中并没有发生多大的变化&#xff0c;因此Selenium一统天下的地位可能因新框架的出现而变得不那么稳固。后续的Cypress、TestCafe、Puppeteer被誉为后Selenium时代Web UI自动化的三驾马车。但是由于这三…

ES数据聚合

1.数据聚合 聚合&#xff08;aggregations&#xff09;可以让我们极其方便的实现对数据的统计、分析、运算。例如&#xff1a; 什么品牌的手机最受欢迎&#xff1f; 这些手机的平均价格、最高价格、最低价格&#xff1f; 这些手机每月的销售情况如何&#xff1f; 实现这些…

Python办公自动化 – 自动化文本翻译和Oracle数据库操作

Python办公自动化 – 自动化文本翻译和Oracle数据库操作 以下是往期的文章目录&#xff0c;需要可以查看哦。 Python办公自动化 – Excel和Word的操作运用 Python办公自动化 – Python发送电子邮件和Outlook的集成 Python办公自动化 – 对PDF文档和PPT文档的处理 Python办公自…

Smallpdf扫描、转换、压缩、编辑、签名PDF

【应用名称】&#xff1a;Smallpdf: 扫描、转换、压缩、编辑、签名PDF 【适用平台】&#xff1a;#Android 【软件标签】&#xff1a;#Smallpdf 【应用版本】&#xff1a;1.71.0 【应用大小】&#xff1a;150MB 【软件说明】&#xff1a;通过 Smallpdf&#xff0c;您可以&…

【河海大学论文LaTeX+VSCode全指南】

河海大学论文LaTeXVSCode全指南 前言一、 LaTeX \LaTeX{} LATE​X的安装二、VScode的安装三、VScode的配置四、验证五、优化 前言 LaTeX \LaTeX{} LATE​X在论文写作方面具有传统Word无法比拟的优点&#xff0c;VScode作为一个轻量化的全功能文本编辑器&#xff0c;由于其极强的…

Python 二维平面Delaunay三角网建立

目录 一、算法概念二、代码实现三、结果示例根据二维平面内的离散点建立平面三角网。 一、算法概念 三角剖分与Delaunay剖分定义:如何把一个散点集剖分成不均匀的三角形网格,即在给定的平面点集上,生成三角形集合的过程。考虑平面点集P={p1,p2,p3,…,pn},我们希望得到三…

Kibana:使用反向地理编码绘制自定义区域地图

Elastic 地图&#xff08;Maps&#xff09;附带预定义区域&#xff0c;可让你通过指标快速可视化区域。 地图还提供了绘制你自己的区域地图的功能。 你可以使用任何您想要的区域数据&#xff0c;只要你的源数据包含相应区域的标识符即可。 但是&#xff0c;当源数据不包含区域…

前端安全专题

xss (Cross Site Scripting) 跨站脚本攻击 原理 通常指黑客通过"HTML注入"篡改了网页&#xff0c;插入了恶意的脚本&#xff0c;从而在用户浏览网页时&#xff0c;控制用户浏览器的一种攻击。 常见攻击类型 存储型XSS 攻击者将恶意的 JavaScript 脚本存储在网站…