基于 jenkins 的持续集成、持续部署方案

news2024/11/15 7:15:19

工具介绍

  • python3.12 + fastapi 0.92.0 + uvicorn 开发部署web项目;
  • git + gitee 实现代码版本管理;
  • jenkins + docker 实现持续集成、持续部署;
  • centos7 作为jenkins服务器 & 部署服务器;有条件的可以再启动一台服务器作为部署测试的服务器;

 

项目代码仓库

仓库地址
这里已准备部分web项目代码;后续可以持续开发、持续集成、持续部署;
在这里插入图片描述

编写Dockfile脚本:

# 指定基础镜像
FROM python

# 拷贝项目数据   到容器中.../home/ 
RUN mkdir /home/web_app
COPY src/* /home/web_app
COPY tests/* /home/web_app
COPY requirements.txt /home/web_app
COPY setup.py /home/web_app

# *****装python依赖*****
# 切换工作目录
WORKDIR /home/web_app
RUN python3 -m pip install -r requirements.txt


# 端口映射  同 -p 8083:8083
EXPOSE 8083
# 目录映射  同 -v /home/web_app:/home/web_app
VOLUME /home/web_app

# 执行前台命令,防止端口被占用
CMD ["python3", "app.py"]

 

CentOS7 环境准备及构建测试

iso镜像安装
问题解决及软件安装
 

# 安装git 
sudo yum install -y git
# 配置ssh公钥
ssh-keygen -t rsa  # 回车
# 在~/.ssh/id_rsa.pub 复制公钥,并配置在gitee个人仓库

# 拉取代码仓库开发分支
git clone -b develop git@gitee.com:laufing/web_app.git

# 进入仓库目录
cd web_app
# 执行构建,生成docker image
docker build -t "web_app_image" .
# -t 执行构建镜像的名称
# . 在当前目录下找Dockerfile 脚本  

# 构建完成后查看
docker images
# 启动容器
docker run -d -p 8083:8083 -v /root/web_app:/home/web_app --name=web_app web_app_image

# 查看容器是否启动
[root@centos web_app]# docker ps
CONTAINER ID   IMAGE           COMMAND            CREATED         STATUS         PORTS                                       NAMES
d975824bfca6   web_app_image   "python3 app.py"   4 minutes ago   Up 4 minutes   0.0.0.0:8083->8083/tcp, :::8083->8083/tcp   web_app

局域网内通过http地址访问:
在这里插入图片描述
linux下的8083端口被占用时,容器会启动失败!!!

# 查看端口
lsof -i:8083  # 或者netstat -ano | grep -iE "8083"
# 杀掉
kill -s SIGTERM pid1 pid2 ...

 

创建 jenkins 项目,配置构建

  • centos中启动jenkins
# 使用java 虚拟机启动 
java -jar jenkins.war --httpPort=8081 --httpListenAddress=0.0.0.0
  • windows下载浏览器中访问http://ip:8081
    在这里插入图片描述
  • 创建项目:New Item
    在这里插入图片描述

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

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

相关文章

【Elasticsearch系列六】系统命令API

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

‌内网穿透技术‌总结

内网穿透是一种网络技术,通过它可以使外部网络用户访问内部网络中的设备和服务。一般情况下,内网是无法直接访问的,因为它位于一个封闭的局域网中,无法从外部访问。而通过内网穿透,可以将内部网络中的设备和服务暴露在…

2024年TCGA基因表达数据下载(最新版)

文章目录 前言一、如何使用TCGA数据库获取公共数据?二、使用步骤1.点击Cohort Builder2.数据筛选3. Repository4.数据下载4.1 继续选择筛选条件4.2 添加cart并进入4.3 下载 总结 前言 TCGA 全称 The Cancer Genome Atlas ,即癌症基因组图谱。它是一个大型的癌症研…

【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧

文章目录 Python NumPy学习指南前言第六部分:NumPy在科学计算中的应用1. 数值积分使用梯形规则进行数值积分使用Simpson规则进行数值积分 2. 求解微分方程通过Euler方法求解一阶常微分方程使用scipy.integrate.solve_ivp求解常微分方程 3. 随机过程模拟模拟布朗运动…

Linux下进程间的通信--共享内存

共享内存概述: 共享内存是进程间通信的一种方式,它允许两个或多个进程共享一个给定的存储区。共享内存是最快的一种IPC形式,因为它允许进程直接对内存进行读写操作,而不需要数据在进程之间复制。 共享内存是进程间通信&#xff…

【C++】【网络】【Linux系统编程】单例模式,加锁封装TCP/IP协议套接字

目录 引言 获取套接字 绑定套接字 表明允许监听 单例模式设计 完整代码示例 个人主页:东洛的克莱斯韦克-CSDN博客 引言 有关套接字编程的细节和更多的系统调用课参考《UNIX环境高级编程》一书,可以在如下网站搜索电子版,该书在第16章详…

【C++】缺省(默认)参数

🦄个人主页:小米里的大麦-CSDN博客 🎏所属专栏:C_小米里的大麦的博客-CSDN博客 🎁代码托管:C: 探索C编程精髓,打造高效代码仓库 (gitee.com) ⚙️操作环境:Visual Studio 2022 目录 一、概念 二、 全缺省(Fully Defa…

多态的相关知识

一.多态的概念 1.多态:多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为。 2.多态分为编译时多态(静态多态)和运⾏时多态(动态多态)。 1>编译时多态(静态多态)主要就是函数重载和函数模板,他们传不同类型的…

Powerpaint介绍及实现局部重绘效果测试[comfyui]

🍘背景 powerpaint,是一个高质量多功能的图像修补模型,可以同时支持插入物体、移除物体、图像扩展、形状可控的物体生成。 这个模型也是国产的,原作者是清华大学深圳国际研究生院,清华大学 ,上海人工智能…

JAVA:非对称加密技术的详细指南

请关注微信公众号:拾荒的小海螺 博客地址:http://lsk-ww.cn/ 1、简述 非对称加密是一种加密技术,使用一对密钥进行数据加密和解密。这两个密钥分别是公开密钥(public key)和私有密钥(private key&#xf…

【算法】栈与模拟

【ps】本篇有 5 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1)删除字符串中的所有相邻重复项 .1- 题目解析 .2- 代码编写 2)比较含退格的字符串 .1- 题目解析 .2- 代码编写 3)基本计算器 II .1- 题目解析 .2- 代码编写 4&…

进程状态、进程创建和进程分类

文章目录 进程进程常见的状态进程调度进程状态变化关系 进程标识示例--进程标识的使用以及简介 进程创建fork函数vfork函数示例--使用fork函数创建子进程,并了解进程之间的关系 创建进程时发生的变化虚拟内存空间的变化示例--验证fork函数创建进程时的操作 对文件IO…

【例题】lanqiao3226 宝藏排序Ⅱ

样例输入 5 1 5 9 3 7样例输出 1 3 5 7 9解题思路 这里的n≤10^5,说明O(n ^2)的算法行不通。 基于比较的高效算法和基于数值划分的高效算法全部参考这篇文章 代码 最简单的自带排序 nint(input()) alist(map(int,input().split()))a.sort() print( .join(map…

量化交易backtrader实践(二)_基础加强篇(1)_数据列表准备与主要实践内容

上一篇回顾 上一篇是数据获取篇,在上一篇里,我们初步接触了backtrader的回测逻辑,重点放在了回测的数据获取的问题上,确保了我们在用合适且有效的正规数据在做回测,我们的目的是要通过backtrader深入讨论量化交易的内…

【Linux进程控制】进程等待

目录 进程等待 进程等待是什么? 为什么? 怎么办? wait方法 获取子进程status 多进程的等待问题 waitpid方法 什么是阻塞等待?什么是非阻塞等待? wait/waitpid获取子进程信息原理 进程等待 进程等待是什么&am…

【AI学习】陶哲轩在 2024 年第 65 届国际数学奥林匹克(IMO)的演讲:AI 与数学

陶哲轩在 2024 年第 65 届国际数学奥林匹克关于AI 和数学的演讲,很有意思。陶哲轩的讲话语速太快了,足见其聪明! AI用于数学的一些方面: 陶哲轩介绍到刚刚被数学家接受并开始普及的方法:形式化证明辅助工具。 形式化…

API:连接数字世界的隐形纽带

在这个智能手机和应用程序无处不在的时代,你可能听说过API这个术语,但你知道它究竟是什么吗?API,全称为应用程序编程接口(Application Programming Interface),是一种让不同的软件和服务之间能够…

MySQL基础篇(黑马程序员2022-01-18)

1 MySQL数据库概述 1.1 MySQL数据库的下载,安装,启动停止 1.2 数据模型 (1)关系型数据库(RDBMS) 概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。 特点: A. 使用表存储数据,格式统一,便于维护。…

C++11第五弹:线程库 | 互斥锁 | 原子操作

🌈个人主页: 南桥几晴秋 🌈C专栏: 南桥谈C 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据…

蓝牙耳机是入耳式的好还是开放式的好?2024开放式耳机推荐

个人推荐入开放式耳机,戴起来更舒服,主要有以下几方面原因: 减少对耳部的压迫: 不入耳设计:开放式耳机通常不需要插入耳道,避免了对耳道的直接压迫。入耳式耳机的耳塞长时间塞在耳道内,会对耳…