docker 重启gitlab_Gitlab+CICD自动化部署Python项目

2023-11-03

使用CICD原理:当我们push项目到gitlab,就会触发.gitlab-ci.yml 文件,文件里面的 only:- maste表示,当push的分支为master则执行脚本。执行时通过tags:- shell选择已有的runner去执行。这时候他会把项目拉取到gitlab-runner中,例如文件夹/home/gitlab-runner/builds/gdf435/0/name/test/,相同的runner文件夹的gdf435地址相同。这时候我们通过ssh 将项目复制到我们的测试环境,所以需要配置ssh免密登录,当把项目拉取到测试环境后,我们可以启动supervisor来管理我们的项目。我们可以通过分支来选择部署的环境。

093b0f296cebc202b167f0e350ca5a82.png


## 一 、配置gitlab—Runner
### 1、拉取镜像
```sh
docker pull gitlab/gitlab-runner:latest
```
### 2、创建容器
```shell
docker run -d --name gitlab-runner --restart always -p 8093:8093 -v /var/run/docker.sock:/var/run/docker.sock -v gitlab-runner-config:/etc/gitlab-runner gitlab/gitlab-runner:latest
```
### 3、注册
输入的数据在gitlab,在 项目 --> 设置 --> CI/CD --> Runner 设置:

ab7514fac0a3df5d68e255d6f5a47b9b.png


- 注册
```
docker exec -it gitlab-runner gitlab-runner register
```
- 输入gitlab域名
```
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
https://gitlab.com
```
- 输入gitlab的token
```
Please enter the gitlab-ci token for this runner
xxx
```
- Runner的description ,可在gitlab修改
```
Please enter the gitlab-ci description for this runner
[hostname] my-runner
```
- Runner的标签,可修改
  ```
  Please enter the gitlab-ci tags for this runner (comma separated):
  my-tag,another-tagEnter the [Runner executor](https://docs.gitlab.com/runner/executors/README.html):
  ```
- Enter the [Runner executor](https://docs.gitlab.com/runner/executors/README.html):
  ```
  Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
  shell
  ```
## 二、配置CICD
### 1、安装supervior(参考别人)
### 2、配置runner免密登录到生产机器
在gitlab-runner里切换至gitlab-runner用户配置免密登录,因为runner执行.gitlab-ci.yml时,使用的用户就是gitlab-runner。
```
docker exec -it gitlab-runner bash
su gitlab-runner
ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub root@生产机器IP
```
输入密码后配置成功
```
ssh 生产机器IP地址
```
无需密码进入则成功
### 3、编写.gitlab-ci.yml 文件
```yaml
stages:
  - clean_env            # 清理环境及杀死进程
  - deploy_src           # 部署源码。
  - install_dependency   # 更新依赖  .
  - restart_server       # 重启服务.
  - check_server         # 检测服务.
variables:
  BASE_DIR: "/test/"
job clean_env_job:
  stage: clean_env
  script:
    # 停止之前运行的项目
    - ssh -o stricthostkeychecking=no root@生产机器IP地址 supervisorctl stop yourrunner|| true
    #- ssh -o stricthostkeychecking=no root@生产机器IP地址 killall python3 || true
    #- ssh -o stricthostkeychecking=no root@生产机器IP地址 killall /data/miniconda3/envs/go2cloud_platform/bin/python || true
    # 删除原有的项目
    - ssh -o stricthostkeychecking=no root@生产机器IP地址 rm -rf /data/gitlab-runner/project${BASE_DIR}*
  tags:
    - shell
  only:
    - master
  when: always
job deploy_src_job:
  stage: deploy_src
  script:
    # 复制新的项目到生产机器
    - scp -r /home/gitlab-runner/builds/3245234gfh/0/name/test/* root@生产机器IP地址:/data/gitlab-runner/project${BASE_DIR}
  tags:
    - shell
  only:
    - master
  when: always
job install_dependency_job:
  stage: install_dependency
  script:
    # 安装环境所需要的依赖
    - ssh -o stricthostkeychecking=no root@生产机器IP地址  pip3 install -r /data/gitlab-runner/project${BASE_DIR}requirements.txt
  tags:
    - shell
  only:
    - master
  when: manual
job restart_server_job:
  stage: restart_server
  script:
    - ssh -o stricthostkeychecking=no root@生产机器IP地址 sleep 7
    # 重启项目
    - ssh -o stricthostkeychecking=no root@生产机器IP地址 supervisorctl start yourrunner
    # 查看supervisord的状态
    - ssh -o stricthostkeychecking=no root@生产机器IP地址 ps -ef |grep supervisord |grep -v grep
  tags:
    - shell
  only:
    - master
  when: always
job check_server_job:
  stage: check_server
  script:
    - ssh -o stricthostkeychecking=no root@生产机器IP地址 sleep 7
    # 查看项目的状态
    - ssh -o stricthostkeychecking=no root@生产机器IP地址 ps -ef|grep "8193"
  tags:
    - shell
  only:
    - master
  when: always
```

4296ae1df2764fdfdfb1f085721ddf96.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker 重启gitlab_Gitlab+CICD自动化部署Python项目 的相关文章

  • python 中range(10)什么意思_range什么意思python编程【面试题详解】

    今天爱分享给大家带来range什么意思python编程 面试题详解 希望能够帮助到大家 今天来谈一谈关于Python中range 的作用 和我个人的理解 range的中文意思是 范围 幅度 或者是在xxx之间变动 函数原型 range st
  • linux 更改用户权限

    最近一直在忙项目上的事情 没时间更新 项目基本上已经接近尾声 主要是一些部署的收尾工作 在部署的过程中 也遇到了一些问题 先慢慢记录吧 今天主要记录的是 如何提升普通运行为管理员身份 在日常开发过程中 调用第三方程序 该程序由于内部实现的原
  • Dynamics CRM和企业微信集成(一)理论方案

    Dynamics CRM和企业微信集成 一 理论方案 方案简述 工具类都差不多就位了 那么今天开始写点有用的东西 之前的项目有做过CRM和企业微信集成 现在总结一下吧 方案简述 关键是登陆时 把微信ID和CRM用户做绑定 阅读企业微信的AP
  • 小米笔记本pro 双硬盘双系统 opencore引导安装黑苹果

    个人情况说明 小米笔记本PRO 15 6 项目 参数 CPU i5 8250U GPU MX150 内存 8G 硬盘1 三星pm961 256g 硬盘2 intel 240g 注意事项 三星pm981装黑苹果会有问题 嫌麻烦的话建议直接换硬
  • webpack打包后引用cdn的js_webpack系列-externals配置使用(CDN方式引入JS)

    如果需要引用一个库 但是又不想让webpack打包 减少打包的时间 并且又不影响我们在程序中以CMD AMD或者window global全局等方式进行使用 一般都以import方式引用使用 那就可以通过配置externals 这样做的目的
  • commitlint无效 commit-msg不执行

    一 安装commitlint yarn add commitlint config conventional commitlint cli D 二 commitlint无效 commit msg不执行 解决办法 1 删除package js
  • 【spring5学习笔记】-----bean的多实例与单实例

    bean的多实例与单实例 首先介绍概念 什么是spring中bean的多实例和单实例 在上面这个例子中 我们两次调用context的getBean 方法得到的两个对象的引用值是相等的 这说明此时spring是单实例的 两次调用方法得到的是同
  • tensorflow生成随机数及实现随机采样

    文章目录 1 生成随机数 2 随机采样 2 1 实例代码 3 随机打乱数据 1 生成随机数 参考1 tf random normal 从正态分布中输出随机值 tf random normal shape mean 0 0 stddev 1
  • linux创建文件

    转载自 https www cnblogs com lclq p 5741852 html Linux命令 1 创建文件 1 可以使用cat创建一个新的文件 命令 cat gt gt filename 使用cat创建文件时 以系统默认的文件
  • jdk1.8与tomcat7如何兼容使用

    jdk1 8与tomcat7兼容使用 只需要改一个设置 window preperence找到此页面 点击edit将jre设置更换为1 8
  • matlab绘制脑电地形图,脑电地形图的原理及其结果

    脑电地形图 brain electrical activity mapping BEAM 是将脑电信号输人电子计算机进行处理后转换为一种可定位和定量性分析 并用不同颜色的图像显示的检查技术 其优点是可将脑功能变化与形态定位结合 图像直观 形
  • 计算机视觉领域的一些牛人博客

    转载自 blog csdn net carson2005 以下链接是关于计算机视觉 ComputerVision CV 相关领域的网站链接 其中有CV牛人的主页 CV研究小组的主页 CV领域的paper 代码 CV领域的最新动态 国内的应用
  • Linux Select

    文章目录 1 函数原型 1 1 函数参数说明 1 2 返回值 2 相关数据结构与函数 2 1 struct timeval 2 2 fd set 3 编程模型 4 关于select的阻塞 4 select总结 5 Unix5中IO模型 5
  • 服务器不稳定怎么解决?常见的4种问题和6种处理方法

    一 常见的4种问题 1 机房或服务器问题 联系服务器提供商 要求协助排查故障并解决或者更换硬件 2 软件和硬件故障故障问题 要求服务商更换服务器 或者升级服务器 3 网站本身问题 通过优化网站结构 减少垃圾代码等方式来优化网站访问速度 4
  • flutter dart判断文件是否存在

    File txt File data data sms com smsexample files 2 txt var dir bool await txt exists 返回真假 if dirbool
  • css3 flex 实现常见页面布局

    css3 flex 实现常见页面布局 上中下布局 左中右三列布局 圣杯布局 Flex是Flexible Box的缩写 意为 弹性布局 用来为盒状模型提供最大的灵活性 任何一个容器都可以指定为Flex布局 box display flex 行
  • 云服务器被ddos攻击了怎么办?甜甜来给您解答

    随着互联网科技的发展 网络安全问题日益突出 企业服务器被攻击的事件也越来越频繁 为此快快推出的增值服务高防ip 有效解决了中小企业DDOS攻击问题 同时快快高防ip支持大流量按天付费模式 可按不同业务需求配置弹性防护 成本可控 互联网服务器
  • ansible错误解决:UNREACHABLE Failed to connect to the host via ssh.

    执行过程是 ansible接收动态的hosts与本地的私钥 通过无密码登录方式运行一个playbook 但是运行后始终出现如下问题 PLAY 120 27 26 TASK setup 1 31mfatal 120 27 26 UNREACH
  • Win10系统BitLocker解锁后再次快速锁定办法

    谁都不愿意把自己电脑上资料完全公开 对资料选择性加密处理是唯一的办法 微软Windows7及以后的Windows系统自带磁盘分区BitLocker加密功能是一个不错的选择 BitLocker加密功能的优点之一是可以对磁盘分区进行快速加密 锁

随机推荐

  • jsp不能正常引入jquery($ is not defined)问题分析

    文章目录 1 idea中不能引入jquery step1 step2 2 路径导入问题 3 静态文件不能放在WEB INF下 4 finally jsp中不能正常引入jquery的原因有很多 让我们一步一步来排除 1 idea中不能引入jq
  • 华为面试题: 招聘(javascript)

    题目 某公司组织一场公开招聘活动 假设由于人数和场地的限制 每人每次面试的时长不等 并已经安排给定 用 S1 E1 S2 E2 Sj Ej Si lt Ei 均为非负整数 表示每场面试的开始和结束时间 面试采用一对一的方式 即一名面试官同时
  • 命令行说明中括号的含义

    内的内容表示可写可不写 至少选择大括号内的一个 lt gt 必写项
  • QT删除及创建文件夹

    bool DirMake const QString path QString full path GetFullPath path QDir dir full path if dir exists return true else ret
  • 2022-2023 通信工程专业毕业设计题目选题推荐 - 100例

    文章目录 1前言 2 如何选题 3 通信工程选题方向 2 1 移动通信方向 2 2 嵌入式开发方向 2 3 人工智能方向 2 4 物联网方向 2 5 算法研究方向 2 6 移动应用开发方向 2 7 网络通信方向 3 4 学长作品展示 4 最
  • 二维码PDF417简介及其解码实现(zxing-cpp)

    二维码PDF417是一种堆叠式二维条码 PDF417条码是由美国SYMBOL公司发明的 PDF Portable Data File 意思是 便携数据文件 组成条码的每一个条码字符由4个条和4个空共17个模块构成 故称为PDF417条码 P
  • 【C#学习笔记】数组使用

    using System namespace ConsoleApplication class Program static void Main string args int a new int 3 一维数组 int a new int
  • 如何通过cpolar内网穿透+VNC实现公网远程ubuntu

    文章目录 前言 1 ubuntu安装VNC 2 设置vnc开机启动 3 windows 安装VNC viewer连接工具 4 内网穿透 4 1 安装cpolar 支持使用一键脚本命令安装 4 2 创建隧道映射 4 3 测试公网远程访问 5
  • 毕业设计-基于协同过滤算法的电商平台推荐系统

    目录 前言 课题背景和意义 实现技术思路 一 文献综述 二 基于用户协同过滤推荐系统算法 三 实证分析 四 总结 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计
  • mysql DATE_FORMAT导致索引失效

    最近在优化一个统计的接口 在几十万的数据统计下 接口处理的响应时间达到了20s 看了下代码逻辑 发现其中主要有三个主要的统计方法 在优化了其中一个方法的统计逻辑后 接口的响应时间下降到了3s内 还是没有达到期望的响应时间 1s内 看了下另外
  • 决策树——依据水果特征分类

    文章目录 一 获取数据集 1 提取数据 2 划分数据 二 计算信息增益 1 信息熵 2 计算信息增益 三 绘制决策树 四 分类预测 一 获取数据集 水果中苹果和杨桃外部特征比较鲜明 例如下面两张苹果 杨桃图片 苹果颜色为红色 形状大致为椭圆
  • 优化代码逻辑之 K-近邻算法之鸢尾花实例 使用Spark实现KNN的Demo2

    这篇代码是KNN的优化 代码就是 flatMap里面的结构转换 和aggregate的应用感觉有点难理解 但是思想简单 首先要知道这个优化是基于 有个大数据的思想 分而治之 求出一份数据最大的前一百个数 如果数据太多 内存太小 则将数据切割
  • AndroidStudio AIDL 示例代码详细步骤

    AIDL Android Interface Definition Language 即Android接口定义语言 最近在看Binder的原理 Android里面AIDL就是Binder的经典实现 先记录一下AIDL的使用步骤 1 服务端S
  • 神奇的master公式(递归行为时间复杂度)

    master master公式是干嘛的呀 master公式是干嘛的呀 master是一个对于递归行为时间复杂度的估算 公式为 T N a T N b O N d 不用急我们来举一个栗子 我们先来看看二分法求最大值的代码 public int
  • 疯狂的程序员--绝影

    该博客转自新浪博客 作者 疯狂之桥 网址 http blog sina cn dpool blog s blog a46817ff010157cf html vt 4 今天看到绝影的CSDN博客由于种种原因被关闭了 心中有种说不出的感觉 感
  • python爬虫(一)

    目录 前言 一 爬虫简介 1 1 Python爬虫 1 2 robots协议 二 爬虫分类 2 1 通用网络爬虫 2 2 垂直网络爬虫 2 3 增量式网络爬虫 2 4 分布式网络爬虫 2 5 深度网络爬虫 2 6 搜索引擎爬虫 三 爬虫构造
  • [学习交流] OC学习笔记之id类型及应用场景

    1 NSObject访问子类方法 NSObject是所有类的基类 可以指向任何子类 例如 import
  • 【暴力破解】dvwa

    dvwa暴力破解练习 1 low 首先进行抓包 将包发送到intruder 然后对用户及密码进行暴力破解 成功 Mid 在low的基础上添加了一定的时延 不适合大量字典 但是爆破方式与low相同 High 点击进表单页面抓包包1 放掉之后再
  • parseInt()详解

    可能绝大多数学过js的就知道parseInt 函数 这里对小伙伴来说是有一个难点或者说是误区的 好吧 说的就是我 那就是在官方给的解释中我们能看到其中一个参数 radix 文中多次说他为基数 千万不要把它理解为要转换的进制 看上面的这些可能
  • docker 重启gitlab_Gitlab+CICD自动化部署Python项目

    使用CICD原理 当我们push项目到gitlab 就会触发 gitlab ci yml 文件 文件里面的 only maste表示 当push的分支为master则执行脚本 执行时通过tags shell选择已有的runner去执行 这时