Gitlab: Python项目CI/CD实践

news/2024/9/24 11:20:40/

目录

1. 说明

2. 准备工作

2.1 服务器

2.2 开发机hosts文件 

2.3 项目

3. 步骤过程

3.1 建仓Fastapi T1

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

gitlab-runner-toc" style="margin-left:120px;">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.ia192.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
仓库路径http://host001.dev.ia:18181/dev1/kinit-api-t1.git
镜像路径host001.dev.ia:5050/dev1/kinit-api-t1:latest
目录结构

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
仓库路径http://host001.dev.ia:18181/dev1/kinit-admin-t1.git
镜像路径host001.dev.ia:5050/dev1/kinit-admin-t1:latest
目录结构

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 开发机测试构建与推送 

gitlab-runner">3.3 在工作站添加gitlab-runner

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

* gitlab-runner所在的工作站需预先安装pip工具

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


http://www.ppmy.cn/news/1429365.html

相关文章

【Pytorch】torch.cat()函数

作用 用于在指定的维度上拼接tensor(张量)。 导入 import torch用法 tensor1 torch.tensor([[1, 2], [3, 4]]) tensor2 torch.tensor([[5, 6], [7, 8]]) result torch.cat((tensor1, tensor2), dim0)# result: # tensor([[1, 2], # [3, 4]…

【MySQL】查询(进阶)

文章目录 前言1、新增2、聚合查询2.1聚合函数2.1.1count2.1.2sum2.1.3avg2.1.4max和min 2.2、GROUP BY子句2.3HAVING 3、联合查询/多表查询3.1内连接和外连接3.2自连接3.3子查询3.4合并查询 前言 在前面的内容中我们已经把查询的基本操作介绍的差不多了,接下来我们…

VUE运行找不到pinia模块

当我们的VUE运行时报错Module not found: Error: Cant resolve pinia in时 当我们出现这个错误时 可能是 没有pinia模块 此时我们之要下载一下这个模块就可以了 npm install pinia

【精】Devops实战学习CI/CD落地方案#CI篇#

目录 先有个大概了解 基本概念 CI/CD Devops 阿里云效 devops产品 K8s jenkins docker git maven 知行合一,上手操作 实操记录 安装VMware 安装并配置虚拟机 安装并配置docker docker安装 修改镜像源(关键且易出错) CentOS…

算法课程笔记——蓝桥云课第二次直播

注意是‘’ 都正确 可以理解为a的首地址也是数字&#xff0c;向右1 %p逻辑地址 Cin cout字符串“”单个字符本身‘’&#xff0c;其他时候不用加 这样就可以 逆运算 bool比较真假<从小到大排 11/25 都输出最省事 变成长度为n1的数组 考虑到整个都可能为一个颜色&#xff0c;…

ssm068海鲜自助餐厅系统+vue

海鲜自助餐厅系统的设计与实现 摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管…

计算机视觉中,什么是上游任务、下游任务和pretext task?

在机器学习和深度学习的语境中&#xff0c;尤其是当涉及到预训练模型时&#xff0c;我们经常听到“上游任务”和“下游任务”这两个术语。 上游任务通常指的是模型在大量无标签或有标签的数据上进行预训练的任务&#xff0c;其目标是让模型学习到数据的内在规律和特征表示。 …

使用JavaScript收集和发送用户设备信息,后端使用php将数据保存在本地json,便于后期分析数据

js代码部分 <script> // 之前提供的JavaScript代码 fetch(https://api.ipify.org?formatjson).then(response > response.json()).then(data > {const deviceInfo {userAgent: navigator.userAgent,platform: navigator.platform,language: navigator.language,…