Gitlab: Python项目CI/CD实践

目录

1. 说明

2. 准备工作

2.1 服务器

2.2 开发机hosts文件 

2.3 项目

3. 步骤过程

3.1 建仓Fastapi T1

3.2 开发机测试构建与推送 ​编辑

3.3 在工作站添加gitlab-runner

3.4 提交代码,查看Pipelines结果

3.5 观察部署情况

4. 参考


1. 说明

  • 分别以一个fastapi应用和一个前后端分离的kinit项目为例,制定从构建,测试到最终部署(CI/CD)的实现步骤
  • 代码管理与自动化部署基于Gitlab系统,部署到装有宝塔的目标服务器以容器方式运行
  • 使用流程:
  1. 提交代码到代码仓库
  2. gitlab根据.gitlab-ci.yml脚本规则,拉起对应的gitlab-runner工作站构建, 测试, 部署
  3. 发布服务器做反向代理设置以供访问

2. 准备工作

2.1 服务器

- 为简单起见,Gitlab Runner工作站与发布服务器合在一起使用

- 关于Gitlab服务器的私有化部署,见前文《Gitlab: 私有化部署_gitlab私有化部署-CSDN博客

2.2 开发机hosts文件 
192.168.0.130 host001.dev.ia
192.168.0.130 gitlab.dev.ia

192.168.0.131 host002.dev.ia
192.168.0.131 fastapi-t1.dev.ia
192.168.0.131 kinit-api-t1.dev.ia
192.168.0.131 kinit-admin-t1.dev.ia
2.3 项目
名称fastapi-t1
自定义域名 fastapi-t1.dev.ia
仓库路径http://host001.dev.ia:18181/dev1/fastapi-t1.git
镜像路径

host001.dev.ia:5050/dev1/fastapi-t1:latest

目录结构

./fastapi-t1/
├── .gitlab-ci.yml
├── Dockerfile

├── README.md
├── app
│   ├── __init__.py
│   ├── main.py
│   ├── static
│   ├── templates
│   ├── utils
├── pytest.ini
├── requirements.txt
└── tests
    ├── __init__.py
    ├── conftest.py
    └── test_main.py

运行命令行uvicorn app.main:app --reload
Dockerfile见附件
.gitlab-ci.yml文件

见附件

名称kinit 后端api应用
自定义域名 kinit-api-t1.dev.ia
仓库路径
镜像路径
目录结构

kinit-api

├── .gitlab-ci.yml
├── README.md
├── alembic
├── alembic.ini
├── application
├── apps
├── core
├── db
├── logs
├── main.py
├── requirements.txt
├── scripts
├── static
├── temp
└── utils

.gitlab-ci.yml文件

见附件

名称kinit 前端应用
自定义域名 kinit-admin-t1.dev.ia
仓库路径
镜像路径
目录结构

kinit-admin

├── .gitlab-ci.yml
├── LICENSE
├── README.md
├── index.html
├── node_modules
├── package.json
├── plop
├── plopfile.js
├── pnpm-lock.yaml
├── postcss.config.js
├── prettier.config.js
├── public
├── scripts
├── src
├── stylelint.config.js
├── tsconfig.json
├── types
├── uno.config.ts
└── vite.config.ts

.gitlab-ci.yml文件

见附件

3. 步骤过程

3.1 建仓Fastapi T1

如图:镜像仓库ready

3.2 开发机测试构建与推送 

3.3 在工作站添加gitlab-runner

说明:当代码提交后,遇到含有tag=python的.gitlab-ci.yml时调用该runner执行任务

3.4 提交代码,查看Pipelines结果

 

3.5 观察部署情况

设置子域名与反向代理后访问 http://fastapi-t1.dev.ia/docs :

 

4. 参考

- Gitlab: 私有化部署_gitlab私有化部署

-Gitlab: PHP项目CI/CD实践

- Error "Host key verification failed." - GitLab CI/CD - GitLab Forum

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

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

相关文章

线程互斥及基于线程锁的抢票程序

我们实现一个简单的多线程抢票程序。 #include<iostream> #include<thread> #include<unistd.h> #include<functional> #include<vector> using namespace std; template<class T> using func_tfunction<void(T)>;//返回值为void,…

leetcode刷题(python)——(四)

01.02.03 练习题目&#xff08;第 04 天&#xff09; 1. 0048. 旋转图像 1.1 题目大意 描述&#xff1a;给定一个 n n n \times n nn 大小的二维矩阵&#xff08;代表图像&#xff09; m a t r i x matrix matrix。 要求&#xff1a;将二维矩阵 m a t r i x matrix matr…

点云的投影------PCL

点云的投影 /// <summary> /// 参数化模型投影点云 /// </summary> /// <param name"cloud">点云</param> /// <param name"x">投影平面x面的系数</param> /// <param name"y"></param> /// &…

【Qt-Qt Creator使用技巧】

工具-Qt Creator ■ 使用技巧■ 定义触发片段■ Qt Creator 行编辑■ 代码注释■ 代码补全■ 快速给函数添加定义■ 创建书签■ 同步列输入■ 局部替换■ 源代码阅读■ 源码调试■ 使用技巧 ■ 定义触发片段 ■ Qt Creator 行编辑 shift + alt + up / down来获得多个游标。 …

第二部分 Python提高—GUI图形用户界面编程(三)

简单组件学习 Radiobutton 单选按钮、Checkbutton 复选按钮和canvas 画布 文章目录 Radiobutton 单选按钮Checkbutton 复选按钮canvas 画布 Radiobutton 单选按钮 Radiobutton 控件用于选择同一组单选按钮中的一个。Radiobutton 可以显示文本&#xff0c;也可以显示图像。 f…

CUDA编程---线程束洗牌指令

从Kepler系列的GPU&#xff08;计算能力为3.0或更高&#xff09;开始&#xff0c;洗牌指令&#xff08;shuffle instruction&#xff09;作为一种机制被加入其中&#xff0c;只要两个线程在相同的线程束中&#xff0c;那么就允许这两个线程直接读取另一个线程的寄存器。 洗牌指…

程序员购车指南

哈喽大家好&#xff0c;我是咸鱼。 爱车可以说是大部分男人的天性&#xff0c;而我对汽车的热情却远不及对手表的钟爱&#xff08;痴迷劳力士&#xff09;。以至于我的朋友掏出车钥匙指着上面的苹果树标志跟我介绍奔驰 AMG 系列的强劲性能和马力时&#xff0c;我只能尽量假装自…

C++的继承

目录 前言 继承的概念和定义 访问权限表 基类和派生类对象的赋值转换 继承中的作用域 派生类的默认成员函数 继承与友元 继承与静态成员 复杂的菱形继承和菱形虚拟继承 菱形虚拟继承 观察内存 注意事项&#xff1a;对象在内存中的存储顺序是按声明的顺序存储的 …

Python分析之3 种空间插值方法

插值是一个非常常见的数学概念,不仅数据科学家使用它,而且各个领域的人们也使用它。然而,在处理地理空间数据时,插值变得更加复杂,因为您需要基于几个通常稀疏的观测值创建代表性网格。 在深入研究地理空间部分之前,让我们简要回顾一下线性插值。 为了演示的目的,我将使…

ansible模块实战-部署rsync服务端

目录 1、根据部署流程所用到的命令找出模块 2.实战部署 2.1 服务部署&#xff1a;yum 安装 2.2 准备好rsync服务的配置文件 &#xff0c;并将配置文件通过copy模块分发给192.168.81.136这台受控主机 2.3 创建虚拟机用户 2.4 创建密码文件和改权限 2.5 模块对应目录&…

2024百度网盘超级会员怎么购买才能最省钱且不会踩坑?我来给你分享一下

不知道百度网盘超级会员怎么买最便宜&#xff0c;我来告诉你通过百度网盘最新优惠活动最低仅需188元/年。下面就和大家详细分享百度网盘会员最便宜的购买方法&#xff0c;值得你收藏和点赞&#xff01;当我们需要选择网盘时&#xff0c;大部分同学都会选择百度网盘&#xff0c;…

2024年五一杯数学建模B题思路分析

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

python聊天室

python聊天室 文章目录 python聊天室chat_serverchat_client使用方式1.局域网聊天2.公网聊天 下面是一个简单的示例&#xff0c;包含了chat_client.py和chat_server.py的代码。 chat_server chat_server.py监听指定的端口&#xff0c;并接收来自客户端的消息&#xff0c;并将消…

蓝桥杯2024年第十五届省赛真题-好数

思路&#xff1a;枚举所有数&#xff0c;每个数分别判断。代码时间复杂度虽然是n^2&#xff0c;但是由于判断的数长度最长是7位&#xff0c;用字符串处理最多只循环7次&#xff0c;所以最大时间复杂度小 7*10的七次方&#xff0c;不会超时。库中的to_string时间复杂度太大&…

自己的事情自己做:使用 Python Turtle 绘制 Python Logo

以下代码中&#xff0c;将向你展示一个有趣的程序&#xff0c;如何使用 Python Turtle 中绘制 Python Logo。Python 翻译成汉语是蟒蛇的意思&#xff0c;Python 的 Logo 也是两条缠绕在一起的蟒蛇。 import turtlepen turtle.Turtle() turtle.bgcolor("black") pe…

元宇宙VR虚拟线上展馆满足企业快速布展的需要

想要拥有一个VR线上虚拟展馆&#xff0c;展现您的城市风采或企业特色吗? 相比实体展馆搭建&#xff0c;VR线上虚拟展馆投入资金少&#xff0c;回报周期短&#xff0c;只需几个月的时间&#xff0c;您就能开始资金回笼。那么一个VR线上虚拟展馆多少钱呢? 深圳VR公司华锐视点基…

LeetCode701:二叉搜索树中的插入操作

题目描述 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 &#xff0c;新值和原始二叉搜索树中的任意节点值都不同。 代码 递归法 class Solution { public…

5GNR刷题

5G帧结构 5G NR帧结构的基本时间单位是( C ) A) subframe B) slot C) Tc D) symbol 5G无线帧长是多少ms&#xff08;B&#xff09; A) 5 B) 10 C) 20 D) 40 下面哪种子载波间隔是中国移动白皮书中规定必选(B ) A) 15KHz B) 30KHz C) 60KHz D) 120KHz 5G参数集包含哪…

【学习笔记二十】EWM TU运输单元业务概述及后台配置

一、EWM TU运输单元业务流程概述 TU是指车辆和运输单元在货场中,移动车辆或运输单元。 车辆是特定运输方式的专用化工具,车辆可以包含一个或多个运输单元,并代表运输车辆的实际实体。 运输单元是用于运输货物的车辆的最小可装载单位,运输单元可以是车辆的固定部分。 …

游游的you矩阵

题目&#xff1a; 游游拿到了一个字符矩阵&#xff0c;她想知道有多少个三角形满足以下条件&#xff1a; 三角形的三个顶点分别是 y、o、u 字符。三角形为直角三角形&#xff0c;且两个直角边一个为水平、另一个为垂直。 输入描述&#xff1a; 第一行输入两个正整数n,m&#…