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

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

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

相关文章

Freesia项目目录结构

目录结构 前端目录: (目录结构来自layui-vue-admin) src文件下 api(前端请求后端服务的路由)assert(一些内置或必要的资源文件)layouts(全局框架样式组件)router&…

【转载】深度学习笔记——详解损失函数

原文链接: https://blog.csdn.net/weixin_53765658/article/details/136360033 CSDN账号: Purepisces github账号: purepisces 希望大家可以Star Machine Learning Blog https://github.com/purepisces/Wenqing-Machine_Learning_Blog 损失函数 根据您使用的神经网络类型和数…

第四十七回 一丈青单捉王矮虎 宋公明二打祝家庄-强大而灵活的python装饰器

四面全是埋伏,宋江和众人一直绕圈跑不出去。正在慌乱之时,石秀及时赶到,教大家碰到白杨树就转弯走。走了一段时间,发现围的人越来越多,原来祝家庄以灯笼指挥号令。花荣一箭射下来红灯龙,伏兵自己就乱起来了…

Northwestern University-844计算机科学与技术/软件工程-复试注意事项【考研复习】

本文提到的西北大学是位于密歇根湖泊畔的西北大学。西北大学(英语:Northwestern University,简称:NU)是美国的一所著名私立研究型大学。它由九人于1851年创立,目标是建立一所为西北领地地区的人服务的大学。…

【力扣白嫖日记】550.游戏玩法分析IV

前言 练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。 今日题目: 550.游戏玩法分析IV 表:Activity 列名类型player_idintdevice_idintevent_datedategames_played…

从 iOS 设备恢复数据的 20 个iOS 数据恢复工具

作为 iPhone、iPad 或 iPod 用户,您可能普遍担心自己可能会丢失存储在珍贵 iOS 设备中的所有宝贵数据。数据丢失的原因多种多样,这里列出了一些常见原因: 1. iOS 软件更新 2. 恢复出厂设置 3. 越狱 4. 误操作删除数据 5. iOS 设备崩溃 …

C++笔记(五)--- 虚函数(virtual)

目录 虚函数介绍 虚函数、覆盖和重载区别 虚函数介绍 C的虚函数是多态性的表现 1.构造函数不能为虚函数2.子类继承时虚函数仍为虚函数3.虚函数类外实现时,不需要加virtual4.有虚函数的类,析构函数一定要写成虚函数(否则可能会造成内存泄漏&…

【代码随想录python笔记整理】第十六课 · 出现频率最高的字母

前言:本笔记仅仅只是对内容的整理和自行消化,并不是完整内容,如有侵权,联系立删。 一、哈希表初步 在之前的学习中,我们使用数组、字符串、链表等等,假如需要找到某个节点,则都要从头开始,逐一比较,直到找到为止。为了能够直接通过要查找的记录找到其存储位置,我们选…

、JMETER与它的组件们

os进程取样器 这个取样器可以让jmeter直接调用python写的测试数据 这样就可以调用python写的测试数据给到jmeter进行调用 注意:1建议python返回转json格式dumps一下;2py文件中需要把结果打印出来,可以不用函数直接编写 传到jmeter之后可以用…

你真的了解C语言中的【柔性数组】吗~

柔性数组 1. 什么是柔性数组2. 柔性数组的特点3. 柔性数组的使用4. 柔性数组的优势 1. 什么是柔性数组 也许你从来没有听说过柔性数组这个概念,但是它确实是存在的。 C99中,结构体中的最后⼀个元素允许是未知大小的数组,这就叫做柔性数组成员…

MyBatis 学习(五)之 高级映射

目录 1 association 和 collection 介绍 2 案例分析 3 一对一关联和一对多关联 4 参考文档 1 association 和 collection 介绍 在之前的 SQL 映射文件中提及了 resultMap 元素的 association 和 collection 标签,这两个标签是用来关联查询的,它们的属…

算法--时空复杂度分析以及各个数据量对应的可使用的算法(C++;1s内)

这里写目录标题 由数据范围反推算法时间复杂度以及算法内容分析时间复杂度看循环实例1实例2 固定时间复杂度快排和归并排序二分高精度算法双指针算法单链表插入删除操作栈和队列的操作单调栈和单调队列KMPTire并查集堆哈希表BFS、DFS图的深度优先、宽度优先遍历dijkstra算法朴素…

瑞_Redis_Redis的Java客户端

文章目录 1 Redis的Java客户端1.1 Jedis快速入门1.1.1 入门案例1.1.1.1 项目构建1.1.1.2 引入依赖1.1.1.3 建立连接1.1.1.4 释放资源1.1.1.5 测试1.1.1.6 完整测试类代码 1.1.2 Jedis连接池1.1.2.1 连接池工具类1.1.2.2 改造原始代码 🙊 前言:本文章为瑞…

常用sql语句及其优化

文章目录 介绍常用sql语句1. 数据查询1.1 SELECT 语句1.2 DISTINCT 关键字1.3 WHERE 子句1.4 ORDER BY 子句1.5 LIMIT 关键字 2. 数据更新2.1 INSERT INTO 语句2.2 UPDATE 语句2.3 DELETE FROM 语句 3. 数据管理3.1 CREATE TABLE 语句3.2 ALTER TABLE 语句3.3 DROP TABLE 语句 …

批量自动加好友神器!微信快速扩友秘籍!

对于一些个人或者企业来说,传统的人工添加好友方式往往会出现效率低下,费时费力的问题。那么,有没有一种快速、便捷、安全的方式来解决这个问题呢?答案当然是肯定的,那就是通过使用微信管理系统来解决这一问题。 在微…

基于java+springboot景区行李寄存管理系统设计和实现

基于javaspringboot景区行李寄存管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取…

5GC SBA架构

协议标准:Directory Listing /ftp/Specs/archive/23_series/23.501/ (3gpp.org) NF描述说明NSSFNetwork Slice Selection Function网络切片选择,根据UE的切片选择辅助信息、签约信息等确定UE允许接入的网络切片实例。NEF Network Exposure Function网络开…

疾控中心的污水采样瓶用的是什么材质

疾控中心的污水采样瓶采用的材质是聚乙烯或聚丙烯塑料。这种材质的污水采样瓶具有耐腐蚀、耐高压、无毒无味、重量轻、易于携带等优点。此外,这种材质的污水采样瓶还可以在高温下消毒,不会变形或破裂。 疾控中心的污水采样瓶通常有不同的容积和形状&…

Harbor高可用(haproxy和keepalived)

Harbor高可用(haproxy和keepalived) 文章目录 Harbor高可用(haproxy和keepalived)1.Harbor高可用集群部署架构1.1 主机初始化1.1.1 设置网卡名和ip地址1.1.2 设置主机名1.1.3 配置镜像源1.1.4 关闭防火墙1.1.5 禁用SELinux1.1.6 设…

SpringBoot 自定义映射规则resultMap association一对一

介绍 例:学生表,班级表,希望在查询学生的时候一起返回该学生的班级,而一个实体类封装的是一个表,如需要多表查询就需要自定义映射。 表结构 班级表 学生表 SQL语句 SELECT a.id,a.name,a.classes,b.id classes…