在Linux上搭建gitlab以及自动化编译部署的完整流程

一、安装gitlab

        首先下载gitlab的安装包,地址如下:

https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/bionic/main/g/gitlab-ce/

        然后安装下载的包即可,一般还需要安装openssh-server等依赖包,在安装gitlab包之前可以使用dpkg -I *.deb查看所需依赖并安装。

        修改gitlab配置,主要是一些端口用户等配置:

sudo vim /etc/gitlab/gitlab.rb

## GitLab URL
##! URL on which GitLab will be reachable.
##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
#external_url 'http://gitlab.example.com'
external_url 'http://192.168.229.128' #修改为机器IP

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.server"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "smtp user"
gitlab_rails['smtp_password'] = "smtp password"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_pool'] = false

        修改配置之后执行命令重新加载配置:

sudo gitlab-ctl reconfigure

        执行完该条命令之后,就会生成一个初始密码,位置如下:

sudo cat  /etc/gitlab/initial_root_password

然后通过IP即可访问,输入账号root以及密码即能登入,登入之后可以修改密码。

二、账号申请管理

        有了管理员账号之后,其它用户就能申请个人账号进行使用,申请之后,由管理账号进行通过:

        然后进入以下页面,可以对申请用户进行管理,编辑权限,通过之后,就可以使用申请账号进行登录 :

 三、创建组和项目:

        管理员账号以及有权限的个人账号,都可以创建组和项目,操作比较简单。

四、自动打包发布:

         首先根据提示在组中安装所需要的包,以及申请runner,注意是在编译的服务器中安装,不是在gitlab代码托管的服务器:

        

 

 

         runner创建之后就可以在项目中创建CI/CI流水线:

         具体的一些配置项可以自行在网上查询.gitlab-ci.yaml的编写说明,比如设置只在特定的分支上编译等。

        同时还需要配置ssh以便于免密登录:

        1、生成密钥:

ssh-keygen

        2、将公钥传到服务器(root和host分别对应用户名和IP):

ssh-copy-id root@host

        3、测试免密登录是否成功:

ssh root@host

        接下来在gitlab的项目组中设置CI/CD变量(也可以在具体项目中单独配置):

       

         设置的变量以及值为:

SSH_USER = 服务器用户名
SSH_HOST = 服务器ip
SSH_KNOWN_HOSTS = 文件 ~/.ssh/known_host 中服务器ip的一行(一般为第一行)
SSH_PRIVATE_KEY = 文件 ~/.ssh/id_rsa 中的内容

        这一系列配置完之后,就可以在项目中按照.gitlab-ci.yaml进行编译了,当然,CI服务器上也需要安装一些编译各种包时所需要的依赖包。

五、常见CI错误解决:

Using SSH executor...
ERROR: Preparation failed: ssh command Connect() error: getting host key callback: open /root/.ssh/known_hosts: no such file or directory
Will be retried in 3s ...

解决:在/etc/gitlab-runner/config.toml添加:
[[runners]]
...
  [runners.ssh]
    disable_strict_host_key_checking = true
...
ERROR: Job failed (system failure): prepare environment: exit status 1. Check https://docs.gitlab.com/runner/shells/index.html#shell-profile-loading for more information

解决:
删除 /home/用户/.bash_logout

六、.gitlab-ci.yml范例:

# 指定使用的语言环境
image: debian:latest

stages:
  - build

variables:
  #项目统一放置deb的目录
  LZOS_DIR: /home/openkylin/LZOS

build:
  stage: build
  script:
    - echo "*************************************************** build ***************************************************"
    - echo "LZOS_DIR:$LZOS_DIR"

    #该工程的名字及路径
    - project_name=`dpkg-parsechangelog --show-field Source`
    - echo "project_name:$project_name"
    - project_dir=$LZOS_DIR/$project_name
    - echo "project_dir:$project_dir"

    #该工程的路径不存在则创建
    - if [ ! -d $project_dir ]; then mkdir $project_dir; fi

    #现存最高版本,初始化为0
    - latest_version="0"
    - all_dir=`find $project_dir -type d -regex '.*/[0-9][^/]*$' -printf "%f\n"`
    - for dir in $all_dir; do
        version=$dir;
        echo "version:$version";
        get_version=`dpkg --compare-versions $version gt $latest_version && echo 1 || echo 0`;
        if [ $get_version -eq 1 ]; then
          latest_version=$version;
        fi;
      done
    - echo "latest_version:$latest_version"  

    #获取debian目录下changelog文件中的版本号
    - changelog_version=`dpkg-parsechangelog --show-field Version`
    - echo "changelog_version:$changelog_version"
    
    #比较changelog中的版本号和现存最高版本号,changelog_version大则输出1
    - comparison_results=`dpkg --compare-versions $changelog_version gt $latest_version && echo 1 || echo 0`
    - echo "comparison_results:$comparison_results"

    #changelog版本号正确则编译,否则结束
    - if [ $comparison_results -eq 1 ]; then
        echo "*************************************************** Starting to debuild -b -us -uc***************************************************";
        debuild -b -us -uc;
        dir=$project_dir/$changelog_version;
        if [ ! -d $dir ]; then 
          mkdir $dir; 
          echo "*************************************************** mkdir dir:$dir ***************************************************";
        else
          echo "*************************************************** dir:$dir is exist ***************************************************";
        fi;
        cd ../;
        cp *.deb $dir;
        echo "cp *.deb to path:$dir";
        echo "*************************************************** build deb success ***************************************************";
      else
        echo "***************************** changelog_version($changelog_version) isNot greater than latest_version($latest_version) *****************************";
        exit 10;
      fi

  #选择runner,注册runner时设置了tag,可用于不同平台服务器编译,arm,x86,linux,windows等    
  tags:
    - test-tags

  only:
    - master  
   

        这里主要实现了读取changelog中的版本号与服务器中现存版本进行比较,如果编译的版本号大则继续编译。

        还想加一个自动打tag的功能,后续再补充。。。。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

睡眠经济2.0时代来了,老巨头们有护城河吗?

在第23个世界睡眠日,中国睡眠研究会等机构发布了《中国睡眠研究报告2023》,近半数人每晚平均睡眠时长不足8小时,“失眠”已成为了当代人的生活常态。 越是睡不好,越要想办法。年轻人纷纷求助于好的寝具、好的助眠产品乃至保健品&…

【Halcon】找到设备上的 标识牌

如图,找到设备上的 标识牌 。 标识牌最明显的特征是比其他区域亮, 二值化选择出亮区域,再通过面积选择出目标区域。 先显示图片 *获取图片的大小 get_image_size(Image,Width,Height)*关闭窗口 dev_close_window()*打开窗口 dev_open_win…

java错题总结(19-21页)

链接:关于Java中的ClassLoader下面的哪些描述是错误的_用友笔试题_牛客网 来源:牛客网 B:先讲一下双亲委派机制,简单来说,就是加载一个类的时候,会往上找他的父类加载器,父类加载器找它的父类加…

Centos系统安装RabbitMQ消息中间件

记录一下在centos7.x下面安装RabbitMQ消息中间件 RabbitMQ是一个开源而且遵循 AMQP协议实现的基于 Erlang语言编写,因此安装RabbitMQ之前是需要部署安装Erlang环境的 先安装Erlang https://packagecloud.io/rabbitmq/ 点进去可以看到 因为使用的centos是7.x版本的…

架构设计-数据库篇

大家好,我是易安! 之前我们讲过架构设计的一些原则,和架构设计的方法论,今天我们谈谈高性能数据库集群的设计与应用。 读写分离原理 读写分离的基本原理是将数据库读写操作分散到不同的节点上,下面是其基本架构图。 读…

【Python系列】一个简单的抽奖小程序

序言 很开心你能在万千博文中打开这一篇,希望能给你带来一定的帮助!👍🏻 如果有什么问题,都可以添加下方我的联系方式,联系我噢~😁 ⭐️⭐️⭐️⭐️⭐️沟通交流,一起成为技术达人&…

电视机顶盒哪个牌子好?数码小编盘点电视机顶盒排行榜

电视机顶盒哪个牌子好?这是困扰新手们的一大难题,部分产品被爆出虚标高配、偷工减料,面对众多的机顶盒品牌和型号,怎么选择才好?小编以销量和用户评价为标准,盘点了电视机顶盒排行榜,跟着我一起…

【Linux】进程学习(1)---理解进程概念

文章目录 冯诺依曼体系结构理解冯诺依曼体系结构 操作系统概念与定位概念计算机管理模型计算机的软硬件体系结构图系统调用和库函数概念 进程基本概念描述进程--PCBtask_struct内容分类组织进程 冯诺依曼体系结构 数学家冯诺依曼提出了计算机制造的三个基本原则,即采…

代码随想录算法训练营第四十八天| 198.打家劫舍、213.打家劫舍II、337.打家劫舍III

文章目录 198.打家劫舍213.打家劫舍II337.打家劫舍III 198.打家劫舍 题目链接:代码随想录 解题思路: 1.dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i] 只是考虑,不一定偷 2.递推…

GPT-4等大语言模型对教育的未来意味着什么?

‍ ‍ shadow Mixlab这些年举办了非常多的活动和workshop,都带有很强的教育属性。今天我抽空学习了可汗学院的《AI-for-Education》课程,非常有启发。我记录了精华内容,分享给大家。 课程地址: www.khanacademy.org/college-caree…

设计模式——观察者模式

导航: 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线设计模式牛客面试题 目录 观察者模式 1、天气预报需求 2、天气预报需求方案之普通方案 3、观察者模式介绍 4、观察者模式优化天气预报案例 5、JDK 的O…

销售数据分析怎么做?这篇文章说清楚了

如何分析销售数据?分析销售数据有哪些指标?销售数据分析有什么作用? 销售数据是不是得通过数据分析软件啊? 本文将为您解答疑惑—— 一、分析销售数据的指标 从两个层面上来讲,一个是对销售情况的整体把控&#xf…

红黑树理论详解与Java实现

文章目录 基本定义五大性质红黑树和2-3-4树的关系红黑树和2-3-4树各结点对应关系添加结点到红黑树注意事项添加的所有情况 添加导致不平衡叔父节点不是红色节点(祖父节点为红色)添加不平衡LL/RR添加不平衡LR/RL 叔父节点是红色节点(祖父节点为…

破解马赛克有多「容易」?

刷短视频时,估计大家都看过下面这类视频,各家营销号争相曝光「一分钟解码苹果笔刷背后内容」的秘密。换汤不换药,自媒体们戏称其为「破解马赛克」,殊不知让多少不明真相的用户建立起了错误的认知,也让苹果笔刷第 10086…

【面试】嵌入式C语言题目整理

【面试】嵌入式C语言题目整理 描述内存四区。 内存四区分为:代码区、静态区、堆区、栈区 代码区就是用来存放代码的。 静态区用来存放全局变量、静态变量、常量(字符串常量、const修饰的全局变量)。 堆区中的内存是由程序员自己申请和释放的&…

九、MyBatis动态SQL

文章目录 九、动态SQL9.1 if9.2 where9.3 trim9.4 choose、when、otherwise9.5 foreach9.6 SQL片段 本人其他相关文章链接 九、动态SQL 9.1 if 总结:根据标签中test属性所对应的表达式决定标签中的内容是否需要拼接到SQL中。 User getUserByParamsWithIf(User user…

Packet Tracer - 在思科路由器上配置 AAA 认证

Packet Tracer - 在思科路由器上配置 AAA 认证 拓扑图 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 交换机端口 R1 G0/1 192.168.1.1 255.255.255.0 不适用 S1 F0/1 S0/0/0 (DCE) 10.1.1.2 255.255.255.252 不适用 不适用 R2 G0/0 192.168.2.1 255.2…

(四)Kubernetes - 手动部署(二进制方式安装)

Kubernetes - 手动部署 [ 3 ] 1 部署work node1.1 创建工作目录并拷贝二进制文件1.2 部署kubelet1.2.1 创建配置文件1.2.2 配置文件1.2.3 生成kubelet初次加入集群引导kubeconfig文件1.2.4 systemd管理kubelet1.2.5 启动并设置开机启动1.2.6 允许kubelet证书申请并加入集群 1.3…

JAVA-异常

文章目录 1.异常的体系1.3异常的分类 2.异常的处理2.2异常的抛出throw2.3异常的捕获2.3.1异常声明throws2.3.2 try-catch捕获并处理2.3.3 finally 2.4 异常的处理流程 3.自定义异常类 1.异常的体系 Throwable:是异常体系的顶层类,其派生出两个重要的子类…

人员拥挤检测系统 yolov5

人员拥挤检测系统通过YOLOv5网络模型算法技术,人员拥挤检测系统算法模型对校园/厂区车间/街道等场景的异常的人群聚集(出现拥挤情况)时,立刻抓拍存档并通知相关人员及时处理。在介绍Yolo算法之前,首先先介绍一下滑动窗…