CI/CD是什么

CI全名Continuous Integration,啥意思?就是我们经常听到的持续集成概念。
当开发每天会提交多次代码到主干上,会做一些重复性的动作时,就可以用持续集成环境来操作。
有集成了,就肯定少不了它的好基友,没错就是CD。
CD全名是Continuous Deployment,是持续部署。
CD还有个小号,交持续交付,英文全称是Continuous delivery,缩写也是CD。
CI/CD优点是,重复的工作用自动化来代替、减少时间成本、版本发布时间减短了。

CD图

有什么类型的CI

jenkins

gitlab

GitLab

1、安装gitlab

gitlab是一款项目软件管理工具。

2、什么是gitlabrunner

GitLab-Runner是配合GitLab-CI进行使用的。一般地,GitLab里面的每一个工程都会定义一个属于这个工程的软件集成脚本,用来自动化地完成一些软件集成工作。当这个工程的仓库代码发生变动时,比如有人push了代码,GitLab就会将这个变动通知GitLab-CI。这时GitLab-CI会找出与这个工程相关联的Runner,并通知这些Runner把代码更新到本地并执行预定义好的执行脚本。
 所以,GitLab-Runner就是一个用来执行软件集成脚本的东西。你可以想象一下:Runner就像一个个的工人,而GitLab-CI就是这些工人的一个管理中心,所有工人都要在GitLab-CI里面登记注册,并且表明自己是为哪个工程服务的。当相应的工程发生变化时,GitLab-CI就会通知相应的工人执行软件集成脚本。如下图所示:

3、安装gitlab runner

添加官方库

 # For Debian/Ubuntu/Mint
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash # For RHEL/CentOS/Fedora
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

命令安装

# MacOS
sudo brew install gitlab-ci-multi-runner
# For Debian/Ubuntu/Mint sudo apt-get install gitlab-ci-multi-runner # For RHEL/CentOS/Fedora
sudo yum install gitlab-ci-multi-runner

建议找国内镜像源安装(清华大学开源镜像源)

https://mirrors4.tuna.tsinghua.edu.cn/gitlab-runner/yum/el7/gitlab-runner-12.4.1-1.x86_64.rpm

wget https://mirrors4.tuna.tsinghua.edu.cn/gitlab-runner/yum/el7/gitlab-runner-12.4.1-1.x86_64.rpm

yum localinstall -y gitlab-runner-12.4.-.x86_64.rpm

注册

gitlab-runner register
输入此命令后会提示一下操纵 输入你的gitlaburl
lease enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
XXX 输入你的gitlab注册令牌
Please enter the gitlab-ci token for this runner
XXX 输入说明
Please enter the gitlab-ci description for this runner
XXX 输入runner的tags(给这个gitlab-runner输入一个标记,这个tag非常重要,在后续的使用过程中需要使用这个tag来指定gitlab-runner)
是否运行在没有tag的build上面。在配置gitlab-ci的时候,会有很多job,每个job可以通过tags属性来选择runner。这里为true表示如果job没有配置tags,也执行
Please enter the gitlab-ci tags for this runner (comma separated)

输入 Runner 执行方式(一般都是shell) 说明https://docs.gitlab.com/runner/executors/README.html
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:

shell

(1)、手动设置  具体的  runner,   指定到特定的runner

runner类型

 GitLab-Runner可以分类两种类型:Shared Runner(共享型)和Specific Runner(指定型)。
  Shared Runner:这种Runner是所有工程都能够用的。只有系统管理员能够创建Shared Runner。
  Specific Runner:这种Runner只能为指定的工程服务。拥有该工程访问权限的人都能够为该工程创建Shared Runner。

点击修改一下 runner

(2)、共享runner  只能root用户创建这个runner

(3)、群组runner   在组上面设置,这个用的比较多。

(4)、k8s runner

4、项目添加 .gitlab-ci.yml 配置文件  。可去官网查看配置文件语法

一般ci文件还会添加docker login的命令,进行命令推送到仓库的操作

(1)ci命令是在gitlab-runner执行的。gitlab-runer 使用的用户是 gitlab-runner 用户。此用户执行docker命令时候有权限问题,一般会有下面提示

解决方法

原因是我用root运行docker,而gitlab的runner是用gitlab-runner这个帐户来运行的,遇到了权限问题。

ls -slh /var/run/docker.sock

 srw-rw----  root root  Dec  : /var/run/docker.sock

用su - gitlab-runner切换帐户后,也会报告相同的错

$ docker info
Cannot connect to the Docker daemon. Is the docker daemon running on this host? 解决方法是创建一个docker组
groupadd docker
并重启docker进程,这样它会自动用docker这个组在启动
systemctl restart docker
ls -slh /var/run/docker.sock
srw-rw---- root docker Dec : /var/run/docker.sock
最后把gitlab-runner加入docker组就可以了。
usermod -aG docker gitlab-runner

(2)流水线直接卡住,提示信息        此作业被卡住,因为没有任何该项目指定标签的 runner 在线

当时我用的具体runner,    这个原因就是在创建 .gitlab-ci.yml的时候没有给任务指定标签,或者指定的标签不存在而导致的。  (创建runner时指定的标签要和ci文件里面的标签一样)。或者  用群组runner也可以解决这个问题。

(3)  docker login报错Error response from daemon: Get https://10.10.90.105/v2/: dial tcp 10.10.90.105:443: getsockopt: connection refused

解决方案:修改docekr参数

文件:/usr/lib/systemd/system/docker.service

修改完成后 执行:

[root@c7test_master ~]# systemctl daemon-reload
[root@c7test_master ~]# systemctl start docker

dockerfile

dockerfile

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0
COPY . /app/bin WORKDIR /app/bin
ENV ASPNETCORE_URLS http://*:5035 ENTRYPOINT ["dotnet", "CoreWebDemon.dll"]

运行镜像

docker run -d -p 9988:5035 76c71065e1ff

推荐文档

https://www.cnblogs.com/fithon/p/6645020.html

https://gitlab.com/gitlab-org/gitlab-runner

GitLabCICD的更多相关文章

  1. 一个简单的golang项目,实验 gitlab-ci-cd Pipelines

    至少两台主机,gitlab + gitlab-runner gitlab + gitlab-runner安装略 项目源码:https://gitee.com/M27149/testgo.git 在自建 ...

  2. Gitlab-CICD实践篇

    一.背景 随着公司项目使用gitlab越来越多,业务发布的次数越来越频繁,对于发布效率提出了更高的要求.从2012开始,Gitlab官方开始集成了Continuous Integration (CI) ...

  3. 03 持续集成和部署/基础设施 - DevOps之路

    02 持续集成和部署/基础设施 - DevOps之路 文章Github地址,欢迎start:https://github.com/li-keli/DevOps-WiKi 服务的持续集成和部署这里有两套 ...

  4. 50+ Useful Docker Tools

    As containers take root, dozens of tools have sprung up to support them. Check out your options for ...

  5. asp.net core结合Gitlab-CI实现自动化部署

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.前言 在之前的文章中写过k8s+Jenkins+GitLab-自动化部署asp.net core项目 的topic,这次讲解一 ...

  6. gitlab Failed to register this runner. Perhaps you are having network problems runner 注册失败问题解决

    1. 低版本安装地址 https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/v1.11.2/index.html   2. 使用 yum ...

  7. DevOps平台

    DevOps定义(来自维基百科): DevOps(Development和Operations的组合词)是一种重视"软件开发人员(Dev)"和"IT运维技术人员(Ops) ...

  8. gitlab的CI/CD实现

    环境准备: gitlab账号公网账号:代码仓库和编译器 目标机:装有docker和gitlab-runner环境的服务器(Linux或类unix机器,我使用的时centos 项目代码:testgola ...

随机推荐

  1. JavaScript基础08——DOM

    DOM的概念 DOM是document Object Model的缩写,简称文档对象模型.他给文档提供了一种结构化的表示方式,可以改变文档的内容和呈现方式 所谓的DOM是以家族的形式描述HTML.父子 ...

  2. Python高级函数--filter

    def is_palindrome(n): return str(n) == str(n)[::-1] #前两个‘:’表示整个范围,‘-’表示从后面,‘1’表示数据间隔 output = filter ...

  3. UFUN函数UF_MODL UF_DISP UF_OBJ(name_switch) ( UF_DISP_ask_name_display_status、UF_DISP_set_name_display_status)

    /* TODO: Add your application code here */ /* 此程序主要演示的是name_switch (设置名称显示) */ UF_initialize(); //MO ...

  4. random库

    伪随机数的原因: random库中函数主要用于产生各种分布的伪随机数序列.random库中的随机函数是按照一定算法模拟产生的,其概率是确定的.可见的,所以被称为伪随机数.而真正意义上的随机数是按照实验 ...

  5. bzoj1176: [Balkan2007]Mokia cdq

    链接 bzoj 思路 cdq入门题,拆成4个矩阵,然后cdq. 代码 /************************************************************** P ...

  6. kafka部署在云服务器(centOS 6.5),本地远程连接问题

    kafka简介 Apache Kafka发源于LinkedIn,于2011年成为Apache的孵化项目,随后于2012年成为Apache的主要项目之一.Kafka使用Scala和Java进行编写.Ap ...

  7. cocos: 链接错误: _lz_adler32 in liblibquickmac.a

    错误: Undefined symbols for architecture x86_64: "_adler32", referenced from: _lz_adler32 in ...

  8. SpringMVC实现文件下载的两种方式及多文件下载

    1.传统方法 @RequestMapping("/download") public String download( String fileName ,String filePa ...

  9. eventlet 模块搭建 WEB 服务器

    eventlet这个强悍的东东,看到我同事的一些整理.故贴出来,大家一起分享~ motivation 114.113.199.11服务器上nova服务中基于python eventlet实现的定时任务 ...

  10. vue的跳转方式(打开新页面)及传参

    1. router-link跳转 // 直接写上跳转的地址 <router-link to="/detail/one"> <span class="sp ...