转载请注明出处:https://www.cnblogs.com/shining5/p/8863063.html

部署GitLab-CI

简介

GitLab_CI(gitlab continuous integration)是Gitlab提供的持续集成服务。主要功能是每一次push到gitlab的时候,触发一次脚本执行,脚本内容包括编译、测试、部署等自定义内容。

持续集成在自动化工作流程中扮演着十分重要的角色,GitLab内置持续集成,持续部署,持续交付以支持编译,测试和部署应用程序

本文主要利用GitLab-CI实现自动部署

原理

自动部署涉及了若干个角色,主要介绍如下:

  • GitLab-CI

    GitLab自带的持续集成系统,你装的GitLab的那台服务器上就有,无需自行安装。GitLab-CI负责解析.gitlab-ci.yml

  • .gitlab-ci.yml

    GitLab-CI使用YAML文件来管理项目配置,在git项目的根目录下创建此文件,文件中包含一系列的阶段和执行规则。GitLab-CI在push后解析它,根据里面的内容调用runner来执行。YAML配置语法

  • GitLab-Runner

    这个是脚本执行的承载者, .gitlab-ci.yml的script部分就是由runner来负责的。GitLab-CI解析项目里的.gitlab-ci.yml文件之后,根据里面的规则,分配到各个Runner来运行相应的脚本script。

步骤

  • 安装GitLab-CI

    GitLab自带,无需单独安装

  • 安装GitLab-Runner
    在centOS系统安装gitlab-ci-multi-runner,在其它系统安装runner,请参考安装GitLab Runner

  1. 添加GitLab官方仓库
  2. # For RHEL/CentOS/Fedora
  3. curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
  4. 安装最新版本的GitLab Runner
  5. # For RHEL/CentOS/Fedora
  6. sudo yum install gitlab-ci-multi-runner
  • 向GitLab-CI注册Runner,将Runner与git项目绑定起来

    • 先介绍下如何获取项目token,因为注册Runner时会用到,git项目–settings–CI/CD–General pipelines settings–Runner token,如图

  • 注册Runner
  1. sudo gitlab-ci-multi-runner register
  2. Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
  3. http://git.intra.weibo.com
  4. Please enter the gitlab-ci token for this runner:
  5. ***(获取git项目token值)
  6. Please enter the gitlab-ci description for this runner:
  7. Please enter the gitlab-ci tags for this runner (comma separated):
  8. tag名字(很重要,在.gitlab-ci.yml文件里面指定tag,匹配使用哪个tagrunner
  9. Whether to run untagged builds [true/false]:
  10. Whether to lock the Runner to current project [true/false]:
  11. Registering runner... succeeded runner=m15ahKPr
  12. Please enter the executor: docker-ssh, shell, ssh, virtualbox, kubernetes, docker, parallels, docker+machine, docker-ssh+machine:
  13. shell(执行脚本的方式)
  14. Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

通过gitlab-ci-multi-runner status/gitlab-runner status查看runner运行状态,也可以在git项目中查看或编辑runner状态:Settiongs-CI/CD-Runner settings

  • 编写.gitlab-ci.yml
    git项目根目录下编写.gitlab-ci.yml

    1. stages:
    2. -deploy
    3. deploy:
    4. stage: deploy
    5. script:
    6. - deploy.sh
    7. only:
    8. - master
    9. tags:
    10. - runner26

    这里我们只有一个stage:deploy,only指定了只有在master分支push的时候才会被执行,tags是runner26,此tag对应刚才注册runner时候的tags

    最重要的script部分:deploy.sh 这里是一条shell命令,deploy.sh是runner服务器上编写的一个脚本,runner执行时执行此脚本

    .gitlab-ci.yml配置请参考官方文档

    添加徽章

步骤:Settings–>CI/CD–>General pipelines settings–>Pipeline status

[![pipeline status](http://git.intra.weibo.com/dorylus_qa/CITest/badges/master/pipeline.svg)](http://git.intra.weibo.com/dorylus_qa/CITest/commits/master)添加到README.md中

遇到问题及解决办法

  • 执行gitlab-ci时,有时会报user gitlab-runner does not exist或者/home/gitlab-runner:permission denied

    • 解决办法有两个:

      • user add gitlab-runner添加此用户,chown -R gitlab-runner:gitlab-runner /home/gitlab-runner
      • 修改gitlab-ci-multi-runner默认启动参数,默认–working-directory /home/gitlab-runner,–user gitlab-runner,我们可以修改成自己的用户名及工作目录并赋予权限。

        1. 1. kill掉当前gitlab-ci-multi-runner服务
        2. 2. gitlab-ci-multi-runn uninstall
        3. 3. Gitlab-ci-multi-runner install working-directory /data0/gitlab-runner --user tr1
        4. 4. chown -R tr1:tr1 data0/gitlab-runner
        5. 5. 重启服务/usr/bin/gitlab-ci-multi-runner run --working-directory /data0/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-run --syslog --user tr1
  • 项目执行ci时会自动将项目文件下载到runner所在的机器,那如何找到呢?

    • 路径为–working-directory指定的路径,如/home/gitlab-runner/builds下,但下面会有一串字符命名的文件夹,那哪个是我们要找的目录呢?

      • 字符串命名的文件夹与runner中的字符串对应 
  • gitlab-runner如何并发执行任务

    • 默认并发数为1,修改 /etc/gitlab-runner/config.toml中的concurrent的配置即可,然后重启服务
  • runner执行以docker方式,那如何设置数据映射呢?

    • 仍然是修改 /etc/gitlab-runner/config.toml中的配置,找到你注册的runner,修改volumes即可volumes = ["/data0/host:/data0/container:rw","/cache"] 其中/data0/host为宿主机地址,/data0/container容器地址,rw设置读写权限

参考资料

GitLab-CI部署及踩坑总结的更多相关文章

  1. Docker Gitlab CI 部署 Spring Boot 项目

    目前在学习这一块的内容,但是可能每个人环境都不同,导致找不到一篇博客能够完全操作下来没有错误的,所以自己也写一下,记录一下整个搭建的过程. Docker 的安装这里就不赘述了,基本上几行命令都可以了, ...

  2. kubernetes-dashboard(1.8.3)部署与踩坑

    Kubernetes Dashboard 是一个管理Kubernetes集群的全功能Web界面,旨在以UI的方式完全替代命令行工具(kubectl 等). 目录 部署 创建用户 集成Heapster ...

  3. Gitlab CI 集成 Kubernetes 集群部署 Spring Boot 项目

    在上一篇博客中,我们成功将 Gitlab CI 部署到了 Docker 中去,成功创建了 Gitlab CI Pipline 来执行 CI/CD 任务.那么这篇文章我们更进一步,将它集成到 K8s 集 ...

  4. Microsoft SQL Server on Linux 踩坑指南

    微软用 SQL Server 在 2016 年的时候搞了一个大新闻,宣传 Microsoft ❤️ Linux 打得一众软粉措手不及.但是这还是好事情,Linux 上也有好用的 SQL Server ...

  5. 【转】Gitlab CI & Docker & Dockerfile & Docker-compose的博客文章

    gitlab权限设置 GitLab功能系列报道-标签(Labels) Gitlab CI 使用高级技巧 docker-compose是个好东西,越用越香 基于docker-compose的Gitlab ...

  6. 【踩坑经历】一次Asp.NET小网站部署踩坑和解决经历

    2013年给1个大学的小客户部署过一个小型的Asp.NET网站,非常小,用的sqlite数据库,今年人家说要换台服务器,要重新部署一下,好吧,虽然早就过了服务时间,但无奈谁叫人家是客户了,二话不说,上 ...

  7. Gitlab CI 自动部署 asp.net core web api 到Docker容器

    为什么要写这个? 在一个系统长大的过程中会经历不断重构升级来满足商业的需求,而一个严谨的商业系统需要高效.稳定.可扩展,有时候还不得不考虑成本的问题.我希望能找到比较完整的开源解决方案来解决持续集成. ...

  8. Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1)

    相关博文: Ubuntu 简单安装和配置 GitLab Ubuntu 简单安装 Docker Ubuntu Docker 简单安装 GitLab Ubuntu Docker 安装和配置 GitLab ...

  9. Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(2)

    上一篇:Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1) 服务器版本 Ubuntu 16.04 LTS. 本 ...

随机推荐

  1. PCA|factor extraction|CA

    PCA:主成分分析 相关矩阵,找特征值,找每个特征值对应特征向量,即组成主组成式子: 每个式子指向一个结果y,找一条线将这些y分开.有11个变量就有11个新坐标轴,通过点到直线距离来区分. 信息必须集 ...

  2. fatal: remote origin already exists.

    解决方法: 先删除, 再添加 1. git remote rm origin 2. git remote add origin https://github.com/zjulanjian/eshop. ...

  3. idea整合mybatis逆向工程

    --pom.xml添加插件 <build> <finalName>hnapi</finalName> <plugins> <plugin> ...

  4. day14-单继承

    #面向对象的三大特征:继承.多态.封装. #一.单继承: # 1. class Animal: #没有父类,默认继承了顶级父类object类. def __init__(self,name,aggr, ...

  5. VS制作dll、def文件的使用、dll加入工程使用

    1.VS新建工程,在选项的时候,选择dll和空项目,保持干净的dll库: 创建完以后,添加头文件以及源文件. 2.将外部模块使用的接口导出: (1)函数导出: __declspec(dllexport ...

  6. idea 创建项目没有web.xml文件,如何添加

    1.首先看下项目工程里面是否有WEB-INF文件夹,没有就创建一个 2.点击 file 选择 project structure 3.选择 facets,点击+号, 选择 web 4.弹出 弹框 选择 ...

  7. 吴裕雄--天生自然python学习笔记:python文档操作自动生成菜单 Word 文件

    许多学校营养午餐的菜单是由教师来轮流制作 ,这是一个 比较烦锁的工作,如 果能自动用教师最熟悉的 Word 文件来生成一个菜单文件,使教师对生成的菜单稍作 修改即可使用,那将是一个不错的主意. 案例要 ...

  8. JVM简述

    JVM的东西太多了,我们刚开始学java的时候,就会接触堆.栈,还有方法区,因为我们要知道new出来的对象放在哪里,局部变量放在哪里,static修饰的变量放在哪里. 我从网上截一个图: 这里有三大部 ...

  9. Qt QThread必须要了解的几个函数

    概述 如果想对Qt中的QThread有个更加深刻的了解,必须要知道这几个重要的函数,现在就一一介绍下. 函数介绍 属性 返回值 函数体 功能 static QThread * QThread::cur ...

  10. 双因子方差分析|adjusted R|强度|SSA|SSE|SST|

    应用统计学 方差分析的基本假设: 组间组平均与总平均的不同是由treatment引发的.单个值与组平均的不同是由组内error引发的. 如果没有处理误差SSA=SSE,所以右尾假设如果F>1则处 ...