当前位置: 首页 > news >正文

Gitlab: 私有化部署

目录

1. 说明

2. 资源要求

3. 安装 

4. 配置实践

4.1 服务器

4.2 人员与项目

4.2 部署准备

4.2.1 访问变量及用户账号设置

4.2.2 Runner设置

4.2.3 要点

5. 应用项目 CI/CD

6. 参考


1. 说明

    gitlab是一个强大且免费的代码管理/部署工具,能统一集成代码仓库,CI/CD的工作。开始时我以为只能在官网上使用,后来才知道能私有化部署,确实了不起。

原理图:

2. 服务器

    gitlab资源要求比较高,建议8核16G,目前我的虚拟机是分配了5核12G,要是工作负荷上来,还要划拨资源。

ServerIP配置备注
host001.dev.ia192.168.0.1305核/12G/200G硬盘Gitlab服务器 / Gitlab Runner工作站 / 开发服务器1
host002.dev.ia192.168.0.1312核/4G/200G硬盘开发服务器2

在各自的 /etc/hosts 做上述设定

3. 安装 

docker-composer方式,指定外部访问url为 http://host001.dev.ia:18181

gitlab.yml

version: "3.5"services:web:image: 'gitlab/gitlab-ce:latest'container_name: gitlabrestart: alwayshostname: 'gitlab.dev.ia'environment:GITLAB_OMNIBUS_CONFIG: |external_url 'http://host001.dev.ia:18181'# Add any other gitlab.rb configuration here, each on its own lineports:- '18181:18181'- '2222:22'volumes:- '/data0/Server/Settings/gitlab:/etc/gitlab'- '/data0/Server/Logs/gitlab:/var/log/gitlab'- '/data0/Server/Db/gitlab:/var/opt/gitlab'shm_size: '256m'

安装后进去容器设置管理员(root)密码

gitlab-rails console -e productionirb> user = User.where(id: 1).first
irb> user.password = 'xxx'
irb> user.password_confirmation = 'xxx'
irb> user.save!

4. 配置实践

4.1 人员与项目

进入管理后台,建立两个开发组,3名用户成员 (Regular Member权限,配置ssh公钥),两个团队项目, 每个项目分别建    dev / staging / live 分支,检查 pull & push是否正常

GroupMemberProjectBranch
Dev1ben, developer1Team1 Prj1dev / staging / live
Dev2ben, developer2Team2 Prj1dev / staging / live

如图:

4.2 部署准备
4.2.1 访问变量及用户账号设置

- 在gitlab服务器,因为docker化安装的,需映射ssh访问端口 22 => 2222

- 用工具生成deployer密钥,然后用管理员账号登录gitlab后台: 

-- 配置deployer私钥变量

    Admin Area => Settings => CI/CD => Variables, 定义 SSH_PRIVATE_KEY,用deployer的私钥填充,将在.gitlab-ci.ym里使用。(注:去掉默认的Protect variable勾选,不然部署时会出现“Error loading key "(stdin)": error in libcrypto”问题)

-- 配置仓库访问公钥, 可选择添加:公共的部署公钥或项目部署公钥(2选1)

A 公共公钥:Admin Area => Deploy Keys,然后在项目Deploy keys中enable之

B 项目公钥:切换到项目 Settings => Repository => Deploy keys,添加deployer的Privately keys并且enable,使得deployer用户可访问代码仓库

- 在部署服务器建deployer账号,分配密钥,目录访问权限,脚本:

adduser deployer
setfacl -R -m u:deployer:rwx /www/wwwroot# 为解决安全及读写权限问题,把deployer添加到www组,把www加到deployer组
usermod -aGwww deployer
usermod -aGdeployer www# 建立密钥文件, 通过vi把该用户的密钥加上
mkdir -p /home/deployer/.ssh && touch /home/deployer/.ssh/authorized_keys && touch /home/deployer/.ssh/id_rsa && touch /home/deployer/.ssh/configchmod 700 /home/deployer/.ssh && chmod 600 /home/deployer/.ssh/id_rsa && chown deployer:deployer -Rf /home/deployer/.ssh

- 为了ssh能正确访问git仓库(端口映射),需编辑 /home/deployer/.ssh/config

Host host001.dev.iaUser gitHostname host001.dev.iaPort 2222Preferredauthentications publickeyIdentityFile ~/.ssh/id_rsaTCPKeepAlive yesAddKeysToAgent yes

 完成后用deployer登录目标机器,测试是否能连接gitlab, 克隆仓库

ssh -T git@host001.dev.iagit clone git@host001.dev.ia:dev1/team1-prj2.git
4.2.2 Runner设置

Runner 所处位置图: 通过Runner工作组,根据脚本进行构建与分发

用root账号登陆,在管理面板(Admin Area)=> CI/CD => Runners页上建Runner,它实际上是个运行代理器,让工作机的关联进来,通过定义tag来调配对应的运行器完成任务,这里我定义了一个php的runner

gitlab在项目管理中提供了Pipeline editor工具,可以在不同分支定义一个.gitlab-ci.yml文件,记叙CI/CD步骤与详细内容,当用户提交并推送代码时触发过程

工作机安装gitlab-runner客户端, 脚本 gitlab-runner-install.sh

#!/bin/bash# Download the binary for your system
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64# Give it permission to execute
sudo chmod +x /usr/local/bin/gitlab-runner# Create a GitLab Runner user
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash# Install and run as a service
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

注册runner

gitlab-runner register  --url http://host001.dev.ia:18181  --token glrt-HfgiG84kn28NvU69stkh- 选择shell类型gitlab-runner run# 其他相关命令
gitlab-runner list
gitlab-runner unregister --all-runners
gitlab-runner unregister  --url http://host001.dev.ia:18181  --token glrt-ABh3NZLwxomjSk6szHbz
4.2.3 要点

- 在gitlab文档中,是没有提及给gitlab-runner账号配deployer私钥的,当用giltlab-runner账号在终端进行手动测试时,需把deployer的id_rsa拷贝过去 gitlab-runner/.ssh目录下。

5. 应用项目 CI/CD

请关注后续序列文章

6. 参考

- Use SSH keys to communicate with GitLab | GitLab

- .gitlab-ci.yml 配置 · PHP/Python/前端/Linux 等等 学习笔记 · 看云

- gitlab runner tag - 简书

- https://dev.to/techworld_with_nana/gitlab-cicd-for-beginners-free-course-2mee

相关文章:

Gitlab: 私有化部署

目录 1. 说明 2. 资源要求 3. 安装 4. 配置实践 4.1 服务器 4.2 人员与项目 4.2 部署准备 4.2.1 访问变量及用户账号设置 4.2.2 Runner设置 4.2.3 要点 5. 应用项目 CI/CD 6. 参考 1. 说明 gitlab是一个强大且免费的代码管理/部署工具,能统一集成代码仓…...

深入理解Linux线程(LWP):概念、结构与实现机制(2)

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:会いたい—Naomile 1:12━━━━━━️💟──────── 4:59 🔄 ◀️ ⏸ ▶️ ☰ &a…...

VBS脚本搞定,快速批量提取一堆Excel文件中的数据

1.需求诞生 小王就职于一家国有大型企业,工作业务十分繁忙,在处理企业某业务数据时,需要从上千个Excel文件中提取某一单元格位置的数据,并整理到另一个Excel文件。要说是这样的Excel文件仅有几个或者十几个也还好,手动…...

大数据分析案例-基于SVM支持向量机算法构建手机价格分类预测模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…...

WPF 滑动条样式

效果图&#xff1a; 浅色&#xff1a; 深色&#xff1a; 滑动条部分代码&#xff1a; <Style x:Key"RepeatButtonTransparent" TargetType"{x:Type RepeatButton}"><Setter Property"OverridesDefaultStyle" Value"true"/&g…...

论文设计任务书学习文档|基于Web的个性化简历职位推荐系统的设计与实现

文章目录 论文(设计)题目:基于Web的个性化简历职位推荐系统的设计与实现1、论文(设计)的主要任务及目标2、论文(设计)的主要内容3、论文(设计)的基本要求4、进度安排论文(设计)题目:基于Web的个性化简历职位推荐系统的设计与实现 1、论文(设计)的主要任务及目标…...

Win11系统安装安卓子系统教程

随着Win11系统的不断普及&#xff0c;以及硬件设备的更新换代&#xff0c;我相信很多同学都已经更新并使用到了最新的Win11系统。那么&#xff0c;Win11系统最受期待的功能“Windows Subsystem for Android”&#xff08;简称WSA&#xff09;&#xff0c;即《安卓子系统》。他可…...

Python实现双向链表:从基础到应用

一、引言 双向链表是一种比单向链表更复杂的数据结构&#xff0c;每个节点除了包含数据和指向下一个节点的指针外&#xff0c;还包含一个指向前一个节点的指针。这种结构使得我们可以从链表的任何节点开始&#xff0c;向前或向后遍历链表。 目录 一、引言 二、节点定义 三、…...

c# 读取DataGridView中的数据

/// <summary> /// 读取DataGridView中的数据 /// </summary> /// <param name"dgv">DataGridView对象</param> /// <returns>DataTable对象</returns> private DataTable GetDgvToTab…...

Stable Diffusion中的Clip模型

基础介绍 Stable Diffusion 是一个文本到图像的生成模型&#xff0c;它能够根据用户输入的文本提示&#xff08;prompt&#xff09;生成相应的图像。在这个模型中&#xff0c;CLIP&#xff08;Contrastive Language-Image Pre-training&#xff09;模型扮演了一个关键的角色&a…...

Python批量提取文件夹中图片的名称及路径到指定的.txt文件中

目录 一、代码二、提取效果 一、代码 import os# 定义要保存的文件名 file_name "TestImage/Image_Visible_Gray.txt"# 读取文件夹路径 folder_path "TestImage/Image_Visible_Gray"# 遍历文件夹中的所有文件 with open(file_name, "w") as f…...

微软开源 SBOM 生成工具:sbom-tool下载及使用详解

github地址 GitHub - microsoft/sbom-tool: The SBOM tool is a highly scalable and enterprise ready tool to create SPDX 2.2 compatible SBOMs for any variety of artifacts.The SBOM tool is a highly scalable and enterprise ready tool to create SPDX 2.2 compatib…...

【办公类-18-03】(Python)中班米罗可儿证书批量生成打印(班级、姓名)

作品展示——米罗可儿证书打印幼儿姓名 背景需求 2024年3月1日&#xff0c;中4班孩子一起整理美术操作材料《米罗可儿》的操作本——将每一页纸撕下来&#xff0c;分类摆放、确保纸张上下位置正确。每位孩子们都非常厉害&#xff0c;不仅完成了自己的一本&#xff0c;还将没有…...

js【详解】数据类型原理(含变量赋值详解-浅拷贝)

JavaScript 中的数据按存储方式的不同&#xff0c;分为值类型和引用类型。 值类型&#xff08;共 6 种&#xff09;&#xff1a;赋值的时候传值 —— 数字、字符串、布尔值、null 、undefined&#xff0c;Symbol引用类型&#xff08;仅 1 种&#xff09;&#xff1a;赋值的时候…...

SAM 影像分割——地理空间数据的分段模型的数据调参和自动分割分析

本笔记本展示了如何使用 Segment Anything Model (SAM) 从图像中分割对象,只需几行代码即可完成。 请确保在本笔记本中使用 GPU 运行时。对于 Google Colab,请转到运行时 -> 更改运行时类型,然后选择 GPU 作为硬件加速器。 地理空间数据的分段模型 Segment Anything M…...

Java底层自学大纲_设计模式篇

设计模式专题_自学大纲所属类别学习主题建议课时&#xff08;h&#xff09; A 深入理解设计模式001 SOLID设计原则和策略模式2.5 A 深入理解设计模式002 责任链模式2.5 A 深入理解设计模式003 工厂模式和模版方法模式2.5 A 深入理解设计模式004 装饰者模式2.5 A 深入理解设…...

详解字符串函数<string.h>(上)

1. strlen函数的使用和模拟实现 size_t strlen(const char* str); 1.1 函数功能以及用法 字符串长度 strlen函数的功能是计算字符串的长度。在使用时&#xff0c;要求用户传入需要计算长度的字符串的起始位置&#xff0c;并返回字符串的长度。 #include <stdio.h> #…...

1、docker入门

文章目录 1、tocker简介2、tocker的安装&环境配置2、配置阿里云镜像3、基本命令1、镜像命令2、docker基本命令3、镜像基本命令4、Docker 容器常用命令 1、tocker简介 新一代的虚拟化技术 2、tocker的安装&环境配置 uname -r1、首先查看liunx的内核 yum update -y2、更…...

Qt应用软件【测试篇】cppchecker静态代码检查

文章目录 cppcheker简介下载地址与安装检查项目QT Creator使用CPP Cheker开启检查常见错误总结错误信息说明cppcheker简介 Cppcheck 是一个用于 C/C++ 代码的分析工具。它提供独特的代码分析以检测错误,并专注于检测未定义的行为和危险的编码结构。其目标是仅检测代码中的真实…...

[递推与递归]数的计算

题目描述 给出正整数 n&#xff0c;要求按如下方式构造数列&#xff1a; 只有一个数字 n 的数列是一个合法的数列。在一个合法的数列的末尾加入一个正整数&#xff0c;但是这个正整数不能超过该数列最后一项的一半&#xff0c;可以得到一个新的合法数列。 请你求出&#xff…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...