作者:小凯
沉淀、分享、成长,让自己和他人都能有所收获!

本文的宗旨在于通过简单干净实践的方式教会读者,如何在 Docker 中部署 Jenkins,并通过 Jenkins 完成对项目的打包构建并在 Docker 容器中部署。

Jenkins 的主要作用是帮助你,把需要在本地机器完成的 Maven 构建、Docker 镜像发布、云服务器部署等系列动作全部集成在一个服务下。简化你的构建部署操作过程,因为 Jenkins 也被称为 CI&CD(持续集成&持续部署) 工具。提供超过 1000 个插件(Maven、Git、NodeJs)来支持构建、部署、自动化, 满足任何项目的需要。

官网:

英文:https://www.jenkins.io/(opens new window)
中文:https://www.jenkins.io/zh/(opens new window)

一、操作说明
本节给大家介绍 Jenkins 环境的安装,以及以最简单的方式配置使用 Jenkins 完成对 xfg-dev-tech-jenkins (opens new window)案例项目的部署。部署后可以访问 xfg-dev-tech-jenkins (opens new window)项目提供的接口进行功能验证。整个部署操作流程如下;
在这里插入图片描述

  • 左侧竖列为核心配置部署流程,右侧是需要在配置过程中处理的细节。
  • 通过把本地对项目打包部署的过程拆解为一个个模块,配置到 Jenkins 环境中。这就是 Jenkins 的作用。

二、环境配置
1.确保你已经在(云)服务器上配置了 Docker (opens new window)环境,以及安装了 docker-compose。同时最好已经安装了 Portainer (opens new window)管理界面这样更加方便操作。
2.在配置和后续的验证过程中,会需要访问(云)服务的地址加端口。如果你在云服务配置的,记得开放端口;9000 - portainer、9090 - jenkins、8091 - xfg-dev-tech-app 服务

1. Jenkins 部署
1.1 上传文件
在这里插入图片描述

  • 如图;以上配置内容已经放到 xfg-dev-tech-jenkins (opens new window)工程中,如果你是云服务器部署则需要将 dev-ops 部分全部上传到服务器的根目录下。
  • compose-down.sh 是 docker-compose (opens new window)下载文件,只有你安装了 docker-compose 才能执行 docker-compose -f docker-compose-v1.0.yml up -d
  • jdk-down.sh 是 jdk1.8 下载路径,以及解压脚本。如果你在云服务器下载较慢,也可以本地搜索 jdk1.8 下载,并上传到云服务器上解压。注意:本步骤是可选的,如果你的项目不强依赖于 jdk1.8 也可以使用 Jenkins 默认自带的 JDK17。可以通过在安装后的 Jenkins 控制台执行 which java 找到 JDK 路径。
  • maven 下的 settings.xml 配置,默认配置了阿里云镜像文件,方便在 Jenkins 构建项目时,可以快速地拉取下载下来包。

1.2 脚本说明

version: '3.8'
# 执行脚本;docker-compose -f docker-compose-v1.0.yml up -d
services:jenkins:image: jenkins/jenkins:2.439container_name: jenkinsprivileged: trueuser: rootports:- "9090:8080"- "50001:50000"volumes:- ./jenkins_home:/var/jenkins_home # 如果不配置到云服务器路径下,则可以配置 jenkins_home 会创建一个数据卷使用- /var/run/docker.sock:/var/run/docker.sock- /usr/bin/docker:/usr/local/bin/docker- ./maven/conf/settings.xml:/usr/local/maven/conf/settings.xml # 这里只提供了 maven 的 settings.xml 主要用于修改 maven 的镜像地址- ./jdk/jdk1.8.0_202:/usr/local/jdk1.8.0_202 # 提供了 jdk1.8,如果你需要其他版本也可以配置使用。environment:- JAVA_OPTS=-Djenkins.install.runSetupWizard=false # 禁止安装向导「如果需要密码则不要配置」docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPasswordrestart: unless-stoppedvolumes:jenkins_home:

Jenkins Docker 执行安装脚本。

  • ./jenkins_home:/var/jenkins_home 是在云服务器端挂一个映射路径,方便可以重新安装后 Jenkins 依然存在。你也可以配置为 jenkins_home:/var/jenkins_home 这样是自动挂在 volumes jenkins_home 数据卷下。
  • docker 两个 docker 的配置是为了可以在 Jenkins 中使用 Docker 命令,这样才能在 Docker 安装的 Jenkins 容器内,使用 Docker 服务。
  • ./maven/conf/settings.xml:/usr/local/maven/conf/settings.xml 为了在 Jenkins 中使用映射的 Maven 配置。
  • ./jdk/jdk1.8.0_202:/usr/local/jdk1.8.0_202 用于在 Jenkins 中使用 jdk1.8
  • JAVA_OPTS=-Djenkins.install.runSetupWizard=false 这个是一个禁止安装向导,配置为 false 后,则 Jenkins 不会让你设置密码,也不会一开始就安装一堆插件。如果你需要安装向导可以注释掉这个配置。并且当提示你获取密码时,你可以执行;docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword 获取到登录密码。

1.3 执行安装
在这里插入图片描述

[root@lavm-aqhgp9nber dev-ops]# docker-compose -f docker-compose-v1.0.yml up -d
[+] Building 0.0s (0/0)                                                                                                       
[+] Running 1/0Container jenkins  Running 
  • 执行脚本 docker-compose -f docker-compose-v1.0.yml up -d 后,这样执行完毕后,则表明已经安装成功了💐。

2. 插件安装
地址:http://localhost:9090/ (opens new window)- 登录Jenkins
在这里插入图片描述
在这里插入图片描述

  • 1~2步,设置镜像源,设置后重启一下 Jenkins。 镜像源地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
  • 3~4步,下载插件,先下载安装 chinese 汉化插件,方便不太熟悉 Jenkins 的伙伴更好的知道页面都是啥内容。
  • 5步,所有的插件安装完成后,都需要重启才会生效。安装完 chinese 插件,重启在进入到 Jenkins 就是汉化的页面了
  • 除了以上步骤,你还需要同样的方式安装 maven、git、docker 插件。
  • 注意,因为网络问题你可以再做过程中,提示失败。没关系,你可以再搜这个插件,再重新下载。它会把失败的继续下载。

3. 全局工具配置
地址:http://localhost:9090/manage/configureTools/(opens new window)
在这里插入图片描述

  • 用于构建部署的 SpringBoot 应用的环境,都需要在全局工具中配置好。包括;Maven、JDK、Git、Docker。注意这里的环境路径配置,如果配置了是会提示你没有对应的路径文件夹。

4. 添加凭证
地址:http://localhost:9090/manage/credentials/store/system/domain/_/(opens new window)

在这里插入图片描述

  • 配置了Git仓库的连接凭证,才能从Git仓库拉取代码。
  • 如果你还需要操作如 ssh 也需要配置凭证。

三、新建任务
一个任务就是一条构建发布部署项目的操作。

1. 配置任务
在这里插入图片描述

xfg-dev-tech-jenkins

2. 配置Git
在这里插入图片描述

# 你可以 fork 这个项目,到自己的仓库进行使用
https://gitcode.net/KnowledgePlanet/ddd-scene-solution/xfg-dev-tech-content-moderation.git

3. 配置Maven
在这里插入图片描述

  • 在高级中设置 Maven 配置的路径 /usr/local/maven/conf/settings.xml。这样才能走自己配置的阿里云镜像仓库。
clean install -Dmaven.test.skip=true

3. 配置Shell

# 先删除之前的容器和镜像文件
if [ "$(docker ps -a | grep xfg-dev-tech-app)" ]; then
docker stop xfg-dev-tech-app
docker rm xfg-dev-tech-app
fi
if [ "$(docker images -q xfg-dev-tech-app)" ]; then
docker rmi xfg-dev-tech-app
fi# 重新生成
cd /var/jenkins_home/workspace/xfg-dev-tech-jenkins/xfg-dev-tech-app
docker build -t xiaofuge/xfg-dev-tech-app .
docker run -itd -p 8091:8091 --name xfg-dev-tech-app xiaofuge/xfg-dev-tech-app

在这里插入图片描述

  • 当你熟悉后还可以活学活用,比如这里只是做build 但不做run执行操作。具体的部署可以通过 docker compose 执行部署脚本。
  • 另外如果你有发布镜像的诉求,也可以在这里操作。

四、测试验证
1. 工程准备
工程:https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-jenkins 你可以fork到自己的仓库进行使用,你的账号密码就是 CSDN 的账号密码。

@SpringBootApplication
@RestController()
@RequestMapping("/api/")
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class);}/*** http://localhost:8091/api/test*/@RequestMapping(value = "/test", method = RequestMethod.GET)public ResponseBodyEmitter test(HttpServletResponse response) {response.setContentType("text/event-stream");response.setCharacterEncoding("UTF-8");response.setHeader("Cache-Control", "no-cache");ResponseBodyEmitter emitter = new ResponseBodyEmitter();String[] words = new String[]{"嗨,臭宝。\r\n", "恭喜💐 ", "你的", " Jenkins ", " 部", "署", "测", "试", "成", "功", "了啦🌶!"};new Thread(() -> {for (String word : words) {try {emitter.send(word);Thread.sleep(250);} catch (IOException | InterruptedException e) {throw new RuntimeException(e);}}}).start();return emitter;}}
  • 工程中提供了接口;http://localhost:8091/api/test

2. CI&CD - 构建发布
地址:http://localhost:9090/job/xfg-dev-tech-jenkins/(opens new window)
在这里插入图片描述

  • 点击构建项目,最终会完成构建和部署成功。运行到这代表你全部操作完成了。

3. 验证结果
地址:http://localhost:9000/#!/2/docker/containers(opens new window)
在这里插入图片描述

访问:http://localhost:8091/api/test(opens new window)
在这里插入图片描述

  • 运行到这代表着你已经完整的走完了 Jenkins CI&CD 流程。

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

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

相关文章

Django接口自动化平台实现(三)

3.2 后台 admin 添加数据 1)注册模型类到 admin: 1 from django.contrib import admin2 from . import models3 4 5 class ProjectAdmin(admin.ModelAdmin):6 list_display ("id", "name", "proj_owner", "tes…

CentOS 7 配置环境变量常见的4种方式

✨博客主页: https://blog.csdn.net/m0_63815035?typeblog 💗《博客内容》:.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 📢博客专栏: https://blog.csdn.net/m0_63815035/cat…

k8s:手动创建PV,解决postgis数据库本地永久存储

1.离线环境CPU:Hygon C86 7285 32-core Processor 操作系统:麒麟操作系统 containerd:1.7.27 Kubernetes:1.26.12 KubeSphere:4.1.2 kubekey:3.1.10 Harbor:2.13.1 Postgis:17-3.52创建StorageClass2.1创建 apiVersion: storage.k8s.io/v1kin…

谷歌浏览器Chrome的多用户配置文件功能

谷歌浏览器Chrome的多用户配置文件功能允许在同一设备上创建多个独立账户,每个账户拥有完全隔离的浏览数据(如书签、历史记录、扩展、Cookies等),非常适合工作/生活账户分离、家庭共享或临时多账号登录场景。 如何使用Chrome的多用户配置文件功能? 一、创建与切换用户 1.…

傲软录屏 专业高清录屏软件 ApowerREC Pro 下载与保姆级安装教程!!

小编今天分享一款强大的电脑屏幕录像软件 傲软录屏 ApowerREC,能够帮助用户录制中电脑桌面屏幕上的所有内容,包括画面和声音,支持全屏录制、区域录制、画中画以及摄像头录制等多种视频录制模式,此外,还支持计划任务录制…

【计算机网络】MAC地址与IP地址:网络通信的双重身份标识

在计算机网络领域,MAC地址与IP地址是两个核心概念,它们共同构成了数据传输的基础。理解二者的区别与联系,对于网络配置、故障排查及安全管理至关重要。 一、基本概念 1. MAC地址(物理地址) 定义:固化在网络…

如何用keepAlive实现标签页缓存

什么是KeepAlive首先,要明确所说的是TCP的 KeepAlive 还是HTTP的 Keep-Alive。TCP的KeepAlive和HTTP的Keep-Alive是完全不同的概念,不能混为一谈。实际上HTTP的KeepAlive写法是Keep-Alive,跟TCP的KeepAlive写法上也有不同。TCP的KeepAliveTCP…

数据库隔离级别

隔离级别决定了事务之间的可见性规则,直接影响数据库的并发性能和数据一致性。SQL 标准定义了 4 种隔离级别,从低到高依次为:读未提交→读已提交→可重复读→串行化。隔离级别越高,对并发问题的解决能力越强,但对性能的…

基于Python flask的电影数据分析及可视化系统的设计与实现,可视化内容很丰富

摘要:基于Python的电影数据分析及可视化系统是一个应用于电影市场的数据分析平台,旨在为广大电影爱好者提供更准确、更详细、更实用的电影数据。数据分析部分主要是对来自猫眼电影网站上的数据进行清洗、分类处理、存储等步骤,数据可视化则是…

TCP通讯开发注意事项及常见问题解析

文章目录一、TCP协议特性与开发挑战二、粘包与拆包问题深度解析1. 成因原理2. 典型场景与实例验证3. 系统化解决方案接收方每次读取10字节2. 丢包检测与验证工具3. 工程化解决方案四、连接管理关键实践1. 超时机制设计2. TIME_WAIT状态优化3. 异常处理最佳实践五、高性能TCP开发…

2021 RoboCom 世界机器人开发者大赛-本科组(复赛)解题报告 | 珂学家

前言 题解 睿抗机器人开发者大赛CAIP-编程技能赛-历年真题 汇总 2021 RoboCom 世界机器人开发者大赛-本科组(复赛)解题报告 感觉这个T1特别有意思,非典型题,着重推演下结论。 T2是一道玄学题,但是涉及一些优化技巧…

《计算机“十万个为什么”》之 MQ

《计算机“十万个为什么”》之 MQ 📨 欢迎来到消息队列的奇妙世界! 在这篇文章中,我们将探索 MQ 的奥秘,从基础概念到实际应用,让你彻底搞懂这个分布式系统中不可或缺的重要组件!🚀 作者&#x…

Django母婴商城项目实践(七)- 首页数据业务视图

7、首页数据业务视图 1、介绍 视图(View)是Django的MTV架构模式的V部分,主要负责处理用户请求和生成相应的响应内容,然后在页面或其他类型文档中显示。 也可以理解为视图是MVC架构里面的C部分(控制器),主要处理功能和业务上的逻辑。我们习惯使用视图函数处理HTTP请求,…

android 12 的 aidl for HAL 开发示例

说明:aidl for HAL 这种机制,可以自动生成java代码,app调用可以获取中间过程的jar包,结合反射调用 ServiceManager.getService 方法,直接获取 HAL 服务,不再需要费力在framework层添加代码,方便…

网络安全渗透攻击案例实战:某公司内网为目标的渗透测试全过程

目录一、案例背景二、目标分析(信息收集阶段)🌐 外部信息搜集🧠 指纹识别和端口扫描三、攻击流程(渗透测试全过程)🎯 步骤1:Web漏洞利用 —— 泛微OA远程命令执行漏洞(CV…

AI视频-剧本篇学习笔记

1.提示词万能框架是什么:ai扮演的角色做什么:解决什么问题怎么做:标准2、剧本模版假设你是一位拥有30年电影拍摄经验的世界顶级导演,拥有丰富的电影拍摄经验和高超的电影拍摄技术,同时也擅长各种影片的剧本创作。我需要你仔细阅读…

A316-HF-DAC-V1:专业USB HiFi音频解码器评估板技术解析

引言 随着高解析度音频的普及,对高品质音频解码设备的需求日益增长。本文将介绍一款专为USB HiFi音频解码器设计的专业评估板——A316-HF-DAC-V1,这是一款基于XMOS XU316技术的高性能音频解码评估平台。产品概述 A316-HF-DAC-V1是一款专业的USB HiFi音频…

超低延迟RTSP播放器在工业机器人远程控制中的应用探索

技术背景 在智能制造高速发展的今天,工业机器人已经从单一的生产作业工具,转变为协作化、智能化的生产伙伴。无论是高精度的多关节机械臂、自主导航的移动机器人,还是与人协同工作的协作机器人,都越来越多地被应用于智能工厂、仓…

Elasticsearch Java 8.x 的聚合 API 及子聚合的用法

背景 Elasticsearch 版本发布的很勤, API 客户端的用法各个版本之间差异也是很大。尤其是 Elasticsearch 8.x 版本直接废弃了 RestHighLevelClient 对象。 Query 和 Aggregation 的 Builder 的用法也有变化。 本文记录项目升级 Elasticsearch API 到 8.x 版本时聚合…

Dify功能熟悉

Dify功能熟悉 文章目录Dify功能熟悉一、介绍1.1 快速开始1.2 官方文档二、workflow2.1 开始和结束2.2 简单示例三、节点3.1 节点一览表3.2 节点-----开始3.3 节点-----LLM3.4 知识检索(增强回答准确性)3.5 Agent智能体3.6 问题分类器3.7 http四、工具&am…