前端devops——利用gitlab实现CI/CD自动化部署

news2024/9/27 12:11:10

目录

前言

一、前期准备

1、开启虚拟服务

2、下载并安装docker

 二、开始部署

1、安装gitlab

2、修改默认账号登录密码

3、修改项目clone地址 

三、Gitlab CI/CD

1、安装并运行gitlab-runner

2、执行runner

3、将项目注册到gitlab-runner

1、获取token

2、执行注册

3、添加yml


前言

Git是一个用于代码的存储和版本控制开源的分布式版本控制系统。GitLab 则是一个用于仓库管理系统的开源项目。本篇文章将讲解如何用gitlab搭建一个私有化的代码管理平台,并实现CI/CD自动化部署。由于条件限制,本篇的所有操作都在windows下执行,并使用docker进行操作。

一、前期准备

1、开启虚拟服务

我们需要在 控制面板->程序和功能->启动或关闭Window功能中开启开启hyper-v服务,如图所示

2、下载并安装docker

我们可以从官方网站下载对应版本的docker并安装,windows下的安装较为简单,此处就不赘述,关于docker方面的相关知识,因为篇幅较长,希望更深入了解docker的同学可以查看一下这个系列的博客,有比较详细的讲解。安装完之后桌面上会出现这个小图标,双击即可打开windows下的docker管理界面。windows下的应用提供了docker的可视化管理界面,基本上所有的操作,我们都可以通过ui界面完成,降低了上手的门槛。打开之后大概张这个样子

 二、开始部署

1、安装gitlab

 首先我们需要在docker中安装gitlab,我们可以通过命令 :

docker pull gitlab/gitlab-ce

拉取gitlab镜像,执行完成之后,我们应该可以在docker的管理界面中看到对应的镜像

接着我们可以通过类似的命令行运行gitlab

docker run -d  -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce

 命令中的443,80,22分别代表本机和docker容器端口之间的映射,可以根据不同需求进行修改。

我们也可以通过管理工具的界面开启docker,点击红框中的按钮,输入对应的端口映射即可 

至此,如无意外,我们应该能够通过我们的本机ip加配置的端口号访问到gitlab了,例如上述例子我们可以通过http://localhost:32771访问到gitlab

2、修改默认账号登录密码

gitlab提供了一个默认的root账户用于用户的各种初始化操作,用户名是root,初始密码出于各种安全原因,我们需要通过一定的操作才能够获取,以下是首次登录前需要的准备动作:

首先我们在控制台中输入查询出当前运行的所有docker实例

docker ps

然后执行一下代码进入到容器内部

docker exec -it 容器id /bin/bash

效果如下所示:

在容器中我们可以在路径 /etc/gitlab/initial_root_password中找到默认的root密码,但密码比较复杂,我们可以选择修改密码,步骤如下

输入命令:

gitlab-rails console

弹出 Loading production environment 后,在下面逐步输入:
1、【user=User.where(id:1).first】 查出指定修改的用户,1 为root

2、【user.password='hzq123456'】 需要设置的密码

3、【user.password_confirmation='hzq123456'】  确认上面输入的密码

4、【user.save!】 保存

效果如下图所示:

至此我们可以通过默认的root用户(用户名为root,密码为设置的密码或者从上述路径中查询到的密码)登录gitlab并新建新的用户

3、修改项目clone地址 

到了这一步我们已经可以开始新建项目了,但是问题来了,新建完项目之后我们会发现clone的地址有点奇怪,这里的地址是类似于git@97ef5adf45be:Jimmy/test.git和类似于http://97ef5adf45be//Jimmy/test.git这样的地址,实践证明,通过这样的地址我们是访问不到对应的项目资源的

HTTP的域名配置比较简单,进入menu->admin->settings->general->Visibility and access controls->Custom Git clone URL for HTTP(S),

填入gitlab的网址和端口号并点击保存即可生效,修改之后我们就可以发现我们clone with http里面的地址已经变了,而且能够正常的clone,以下是我本机的配置截图

 ssh的修改稍显麻烦,篇幅限制,ssh的修改方式有兴趣的话可以自行探索,网上也有很多的解决方案,此处就不再赘述

至此,我们已经可以正常的使用gitlab了,接下来我们开始自动化部署部分

三、Gitlab CI/CD

这一部分开始实现持续集成(CI)和持续交付 (CD),CI是当我们的代码提交之后,触发自动检测、构建和测试这一类操作,CD则是在CI的基础上,将集成后的代码自动化部署到各个环境,我们通过以下步骤进行

1、安装并运行gitlab-runner

控制台执行以下代码

docker pull gitlab/gitlab-runner:latest

2、执行runner

通过以下代码启动runner,当然,跟gitlab一样,也可以通过界面直接启动

docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest

3、将项目注册到gitlab-runner

这一步是为了使特定的项目发生变更之后能够触发runner,注册的步骤如下:

1、获取token

我们需要进入对应的项目,然后从settings>CI/CD中,选中runner选项框,如下所示,点击右侧的复制按钮复制token,之后需要用到

2、执行注册

 执行以下代码注册runner

docker exec -it gitlab-runner gitlab-runner register

按照提示一步一步来,

1、Enter the GitLab instance URL(输入当前gitlab的访问地址)

2、Enter the registration token(输入我们上一步复制的token)

3、Enter a description for the runner(这一步可以理解为对这个runner实例的描述)

4、Enter optional maintenance note for the runner(可选项,可以直接回车)

5、Enter tags for the runner (comma-separated)(runner的标签,这个需要留意一下,输入一个特定的标签,这个在后面gitlab的yml文件中的tags中需要输入这个值)

6、Enter an executor(这里我们选docker,表示使用docker镜像来执行gitlab-ci.yml文件内部script命令)

7、Enter the default Docker image(表示默认的镜像,由于我是前端项目,所以这里使用node)

执行的大概效果如图所示:

至此我们就已经将runner注册完毕了,我们可以在settings>CI/CD>Runners的最下方看到这个东西,就代表已经注册成功了

3、添加yml

 我们需要在项目的主目录下添加一个名为.gitlab-ci.yml的配置文件,这个文件用来告诉gitlab-runner要做些什么操作,这样我们提交变更之后,就可以触发CI/CD操作,这里附上一份前端项目的配置文件供参考,执行了简单命令,所做的事情也比较简单,就是执行构建命令,然后将代码打包,发布到远程主机的目录,然后解压,具体的配置操作可以参考gitlab的官方文档,篇幅太长,这里不再赘述

image:
  name: node:14

stages:
  # 构建
  - build
  # # 部署
  - deploy
  # # 部署生产
  # - deploy:release


# 构建产物
build:app:
  stage: build
  artifacts:
    expire_in: 1 day
    paths:
      - dist/
      - package.json
  tags:
    - message
  script:
    - echo '开始打包'
    - yarn
    - yarn build
    - echo '打包结束'

# 发布(apt-get update,apt-get install sshpass更新后安装sshpass,用于自动登录,-o StrictHostKeyChecking=no用于防止Host key verification failed报错)
deploy:app:
  stage: deploy
  tags:
    - message
  script:
    - echo '开始发布'
    - echo '检测到以下产物:'
    - ls
    - echo '检测结束'
    - apt-get update
    - apt-get install sshpass
    - tar -cvf dist.tar dist
    - sshpass -p 123456 scp -P 6022 -o StrictHostKeyChecking=no dist.tar test@166.66.66.666:/var/www/pump_sm
    - sshpass -p 123456 ssh -p 6022 -o StrictHostKeyChecking=no test@166.66.66.666 tar -xvf /var/www/pump_sm/dist.tar -C /var/www/pump_sm

至此,我们完成了所有的内容,当我们提交代码到git,就会触发yml中配置的操作,实现流程自动化,我们可以在我们项目的CI/CD窗口中看到对应的流水线

 以上,祝大家打包愉快~

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

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

相关文章

ETL数据清洗

大多数据仓库的数据架构可以概括为: 数据源-->ODS(操作型数据存储)-->DW-->DM(data mart) ETL贯穿其各个环节。 ​一、数据抽取: 可以理解为是把源数据的数据抽取到ODS或者DW中。 1. 源数据类型: 关系型数据库,如Or…

多模态串讲(上)

多模态的学习在最近几年异常火爆,除了普通的多模态学习,比如视觉问答,图文检索等,其实之前讲的所有这种Language Guided Detection,或者Language Guided Segmentation,这些任务都是多模态的,还有最近火的文…

SpringCloud之负载均衡Ribbon

1.Ribbon是什么? •Ribbon是 Netflix 提供的一个基于HTTP和TCP的客户端负载均衡工具。 •Ribbon主要有两个功能: 1.简化远程调用 2.提供客户端的软件负载均衡算法 Ribbon客户端组件提供一系列完善的配置项,如连接超时,重试等…

ERA5数据不同下载方法

ERA5数据不同下载方法1 ERA5简介2 ERA5下载的三种方法2.1 方法1:GEE下载2.2 方法2:官方网站下载2.3 方法3:通过Python脚本下载(以Linux系统为例)总结参考1 ERA5简介 ERA5是ECMWF对全球气候的第五代大气再分析。再分析…

ArcGIS基础实验操作100例--实验17按条件计算属性字段值

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 基础编辑篇--实验17 按条件计算属性字段值 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff0…

工业远程I/O模块CANopen I/O模块 安装接线说明

1)外观尺寸 DIN35mm Rail标准导轨支架外观与尺寸: 2)面板说明 指示灯说明运行指示灯 绿色预留预留错误指示灯 红色CANopen地址设置开关,CANopen 通讯速率设置开关,当 0表示通信速率为10Kbps 4表示通信速率为250Kbps 1表…

Linux | 内存 | 由内存页不足(page allocation failure)引起程序杀死(OOM Killer)

本文对由于 page allocation failure 而引起 Out of Memory Killer 的背景及工作原理进行不完全总结。 更新:2022 / 12 / 30 文章目录触发条件__alloc_pages_slowpath()__vmalloc_area_node()__vmalloc_node_range工作原理结合实例1.2.GFP_ATOMIC 和 __GFP_COMP&am…

阿里云弹性预测 AHPA:助力厨芯科技降本增效

作者:李鹏(元毅) “使用阿里云弹性预测 AHPA,降低了 K8s 容器成本,同时减轻了运维工作量,加速了业务容器化的进程。”—— 朱晏(厨芯科技VP) 背景 厨芯科技,是全球领先的餐饮设备和服务提供商…

TCP 的报头结构 和 三次握手---详解(看完必会)

TCP 的三次握手: 在搞懂三次握手前,必须要搞明白TCP报头的结构内容 TCP报头结构: 源端口号 : 源计算机上的应用程序的端口号;目的端口号 : 目标计算机的应用程序端口号;序列号:客户端给服务端发送数据时…

React 配置文件(二) 配置环境变量

开发环境一般分为: UAT(测试环境) PRE(预上线环境) PROD(生产环境) 所以本地开发分别搭建相对应环境 2.安装 dotenv 3.在package.json文件中配置环境 "scripts": { "start": "react-app-rewired start", "uat": "dotenv…

【Linux】文件系统与inode

一、文件系统 理解文件系统前首先我们要来先了解一下磁盘结构。 接下来我们看看以水平、垂直角度来看看磁盘结构,并将其区域进行划分。 磁盘的垂直分布 (此图最上面的一面和最下面的一面无磁头,则不存储数据): 磁头数:磁头就是在…

LeetCode303.区域和检索 - 数组不可变

LeetCode刷题记录 文章目录📜题目描述💡解题思路⌨C代码📜题目描述 给定一个整数数组 nums,处理以下类型的多个查询: 计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中…

Windows nc命令下载使用与使用bash建立反弹shell

今天继续给大家介绍渗透测试相关知识,本文主要内容是Windows nc命令下载使用与使用bash建立反弹shell。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强…

磨金石教育摄影技能干货分享|王汉冰摄影作品欣赏—《沙狐之眼》

一、偏爱新疆风光的摄影师王汉冰 王汉冰是新疆人,身为摄影师的他对新疆的大好风光有着强烈的偏爱。 因此经常驾车游历,期望寻找到好的风景,将它记录下来,让世人都能感受到大美新疆的壮丽。 在今年七月,王汉冰来到巴音郭…

C语言 内存函数 自定义类型 结构体 枚举 联合

perror #include <stdio.h> #include <errno.h> #include <string.h>//strerror //perror与上相关 更加方便直接打印错误信息 上边需要先将错误码转换为错误信息 再用printf打印 // int main() {//打开文件失败的时候&#xff0c;会返回NULLFILE* pf fo…

同为(TOWE)IPS系列工业插头插座、连接器的选型及特点

所谓工业插头插座、连接器&#xff0c;即欧洲标准插头插座&#xff0c;主要用于实现电信号的传输和控制以及电子与电气设备之间的电源连接。它可以通过连接器插头与插座之间的插合和分离&#xff0c;使电路产生接通和断开&#xff0c;适用于对安全、寿命和性能具有高要求的应用…

5款OCR文字识别软件推荐_分享好用的OCR(图片转文字)工具

5款OCR文字识别软件推荐 不知道大家是不是不知道OCR单词识别这个词。 小编认为&#xff0c;经常处理各种办公文件的朋友&#xff0c;对OCR文字识别这个词肯定有一定的了解&#xff0c;因为在处理办公文件的时候&#xff0c;很有可能会遇到对OCR文字识别的需求。 而当我们遇到O…

ubuntu16.04运行YOLOV5并部署

运行环境 环境&#xff1a;ubuntu 16.04 CUDA: 10.2 执行模型推理 1. 下载yoloV5 repo git clone https://github.com/ultralytics/yolov52. 用conda新建python环境 conda create -n yolo python3.83. 安装需求包 pip install -r requirements.txt 4. (requremets中包含…

@Configuration如何保证@Bean单例语义?

1. 前言 Spring允许通过Bean注解方法来向容器中注册Bean&#xff0c;如下所示&#xff1a; Bean public Object bean() {return new Object(); }默认情况下&#xff0c;bean应该是单例的&#xff0c;但是如果我们手动去调用Bean方法&#xff0c;bean会被实例化多次&#xff0…