• GitLabCICD


    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.1-1.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
    
    0 srw-rw---- 1 root root 0 Dec 7 10:16 /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
    0 srw-rw---- 1 root docker 0 Dec 10 10:30 /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

  • 相关阅读:
    three.js
    three.js
    three.js
    反射API提供的常用类和函数
    PHP控制反转(IOC)和依赖注入(DI)
    优化思路以及优化过程
    nginx的缓存设置提高性能
    网页内容的压缩编码与传输速度优化
    nginx日志按日期自动切割脚本
    mysql数据备份
  • 原文地址:https://www.cnblogs.com/wudequn/p/11828778.html
Copyright © 2020-2023  润新知