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

news2024/11/17 5:22:54

一、安装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的功能,后续再补充。。。。

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

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

相关文章

【MongoDB】二、MongoDB数据库的基本操作

【MongoDB】二、MongoDB数据库的基本操作 实验目的实验内容任务一:(1)创建数据库newdb(2)在数据库newdb中创建集合mycollection(3)在集合mycollection中插入以下数据:(4&…

如何安装 Auto GPT 4:分步指南

动动发财的小手,点个赞吧! 您对尝试最新最好的文本生成技术感到兴奋吗? Auto GPT 4 因其令人印象深刻的功能而广为人知,但启动和运行它似乎令人望而生畏。幸运的是,我们在这里[1]提供安装 Auto GPT 4 的分步指南。 1. …

快手sig3 48位-unidbg

研究某手app的小伙伴都了解sig3有两个版本,低版本的是42位,高版本的48位。 废话不多说,先抓个包: 上一个当前最新版本的48位sig3,我们以搜索接口为例,效果如图: 在上面可以看到使用unidbg的方式…

【深度学习】计算机视觉(11)——Faster RCNN(工具篇)

文章目录 1 gcc编译报错1.1 错误提示“ld: cannot find -lm/-lc/-lpthread”1.2 解决方法:安装glibc工具1.3 解决方法:修改sources.list1.4 解决方法:软连接 2 Permission denied3 运行报错3.1 module tensorflow has no attribute 3.2 No mo…

火山 xl,xa,xg,xk,xh,xm 六神签名参数

火山 xl,xa,xg,xk,xh,xm 六神签名参数 27/100 发布文章 weixin_38819889 未选择任何文件 new 纯属技术研究,如有侵权,请联系删除。 抓个包,在火山最新的15.6版本中,已经新增加了2个参数x-helios,x-medusa 前段时间do…

IDEA Java 第一个mybatis入门程序

文章目录 准备mysql 开始新建maven项目maven添加引用mybatis配置文件工具类创建实例类添加mappermappermapper.xml 测试类 发现问题org.apache.ibatis.binding.BindingException: Type interface com.cpyy.mapper.UserMapper is not known to the MapperRegistry.The error may…

[计算机图形学]动画与模拟:欧拉方法、刚体与流体(前瞻预习/复习回顾)

一、前言 这是本专栏的倒数第二篇文章了,为什么不是最后一篇?因为我要单独写一篇总结哈哈,不管怎么说,从今年的3.13的MVP变换开始写,写到现在,也是一个很大的工程了,我很高兴能在大二下学期的期…

使用ffmpeg拼接两张图片

最近在工作中遇到了一个需求,就是需要将两张图片拼接在一起,作为一个封面图。如果只是临时拼接一张,我们可以只用photoshop之类的图片编辑工具,将两张图片拼接在一起。而我们的需要是需要实现自动化,由于之前使用过ffm…

KALI入门到高级【第六章】

预计更新第一章 入门 1.1 什么是Kali Linux? 1.2 安装Kali Linux 1.3 Kali Linux桌面环境介绍 1.4 基本命令和工具 第二章 信息收集 1.1 网络扫描 1.2 端口扫描 1.3 漏洞扫描 1.4 社交工程学 第三章 攻击和渗透测试 1.1 密码破解 1.2 暴力破解 1.3 漏洞利用 1.4 特…

Linux网络编程:基础知识

1. MAC地址和IP地址 IPV4:32位;8B 4 32bit IPV6:128位;4B 32 128bit,图中IPV6补全为:fe80:0000:0000:0000:6e3f:77c3:ceca:b5a7 MAC:48位; 4B 12 48bit (图中IPV6和MAC地址使用的16进制表示法&a…

QTDAY4

定时闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimer> //定时器类 #include <QTime> //时间类 #include <QTimerEvent> //定时器事件类 #include <QDateTime> //日期时间类 #include <QText…

052、牛客网算法面试必刷TOP101--二分查找/排序(230503)

文章目录 前言二分查找/排序1、BM17 二分查找-I2、BM18 二维数组中的查找3、BM19 寻找峰值4、BM20 数组中的逆序对5、BM21 旋转数组的最小数字6、BM22 比较版本号 总结 前言 本文记录自己刷&#xff0c;牛客网的面试必刷TOP101&#xff0c;地址&#xff1a;面试必刷TOP101–二…

【GAMES101】05 Rasterization(Triangles)

光栅化过程&#xff1a;将一系列变换后的三角形转换为像素的过程。 三角形在图形学中得到很多的应用。 最基础的多边形&#xff08;边数最少&#xff09;。任何多边形都可以拆成三角形。性质&#xff1a;三角形内部一定是平面的。三角形内外部定义非常清楚。定义三个顶点后&a…

libfacedetection 人脸检测库 检测速度慢的问题

目录 一、libfacedetection 性能介绍 英特尔CPU 使用AVX2指令集 使用AVX512指令集 嵌入式设备 二、加速检测速度 libfacedetetion的前向推理速度很快的原因 使用axv2加速指令 一、libfacedetection 性能介绍 在上一篇文章中&#xff0c;我发现使用摄像头检测&#xff0c;构…

C++入门——内联函数的介绍

目录 前言 内联函数 1. 概念 2.特性 前言 今天小编给大家带来的是内联函数的介绍&#xff0c;大家可能之前没有听过内联函数这个名词&#xff0c;那么今天就和小编一起认识一下这个朋友吧。 内联函数 我们每次在调用函数时都会开辟一个函数栈帧&#xff0c;那么过度的函数…

上海联影面试(部分)(未完全解析)

一面 Spring Boot为什么可以自启动&#xff0c;且变成一个web项目&#xff1f;本地连不上网&#xff0c;Maven缺一个jar包&#xff0c;怎么解决&#xff1f;linux用什么命令找到占用指定端口的进程&#xff0c;并杀掉&#xff1f;Answer by new bing: 查找被占用端口的PID&am…

单载波传输与多载波传输

一、单载波传输 1. 单载波基带传输&#xff1a;系统模型 信道h(t)的带宽为W T&#xff1a;符号周期&#xff0c;数据速率&#xff1a;R1/T&#xff0c;每秒传输R个符号&#xff0c;单位&#xff1a;Hz z(t)&#xff1a;加性噪声 g(t)带宽有限&#xff0c;时间无限&#xff0c…

AI 图像生成工具可以取代摄影师吗?让我们从原理开始聊聊

AI 的风已经吹向了每一个人&#xff0c;在这篇文章中我们一起来聊一聊 AI 图像生成的原理以及未来。 作为一个非职业的摄影爱好者&#xff0c;我通常会在 Instagram 上面搜罗各种各样的优质图片并将其放进我的收藏夹。其中&#xff0c;有一位我关注了很久的德国摄影师&#xff…

Linux常用快捷键

前言&#xff1a;由于需要&#xff0c;梳理了一下常用的快捷键&#xff0c;以便忘记时查找。 Linux系统快捷键&#xff1a;(Bash解释器) 1&#xff09;Tab键 补齐命令补齐路径显示当前目录下的所有目录 2&#xff09;清屏&#xff1a; clearCtrl L ( “L” 大小写均可 ) …