• Gitlab的CI/CD初尝试


    初衷:今天公司的前端和测试人员吵起来了。原因是测试埋怨前端人员把Bug的状态更改为已解决,结果代码根本没提交,而前端人员埋怨测试测的太频繁了,需要打几个环境的包不方便。又要改东西又要频繁打包费时间。凡正各有各的理由,就是不想办法解决问题。

    哎,没办法,为了解决这种问题,我打算看看Gitlab的CI集成,如果能弄上这个那么开发只管提代码就行了,会自动构建环境。

    我这也是现学现卖,今天照着官网和查资料,刚把基本的流程跑通,中间还是费了点时间的,这里记录下

    gitlab ci/cd快速入门

    按照官网上说的,要使用CI,就弄两个东西就行了

    1 在你的项目工程中创建.gitlab-ci.yml文件,这个文件主要是配置Piplines和stages以及脚本。gitlab-runner就是执行这个文件来构建环境的。

    2 安装和配置gitlab-runner,一个Go写的工具,用于执行.gitlab-ci.yml里面的脚本。

    一 创建.gitlab-ci.yml

    stages:
      - deploy
     
    deploy_develop:
      stage: deploy
      tags:
        - nodejs
      script:
        - echo "hello,ci/cd"
      only:
        - dev
    

    上面的文件我定义了一个piplines(deploy), 然后定义了一个job(deploy_develop), 只对dev分支有效,执行这个job时,会输出"hello,ci/cd"

    二 gitlab-runner的安装和配置

    这个gitlab-runner不需要和gitlab在一台机器上,甚至可以是在本地机器。相反官方也建议单独是最好的,构建必须要耗性能呀,不影响其它业务就好。

    安装gitlab-runner
    https://docs.gitlab.com/runner/install/linux-manually.html
    我是按照官方的步骤一步步来的,系统是Centos,如果是其它系统按照上面的安装方式就行

    sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
    

    如果需要设置环境变量,则设置/usr/local/bin到PATH中

    设置可执行权限

    sudo chmod +x /usr/local/bin/gitlab-runner
    

    增加一个单独用户用于gitlab-runner

    sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
    

    安装服务和启动

    sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
    sudo gitlab-runner start
    

    三 配置gitlab-runner

    安装好gitlab-runner后,需要注册下,runner和gitlab之间通过Api通信的

    gitlab-runner register
    

    Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
    http://172.18.10.22/

    上面这个url从gitlab的pipelines里面的Specific Runners去找

    四 遇到的问题

    1. 提交了代码没有触发,一直停留在pending
      报错:This job is stuck, because you don't have any active runners that can run this job.
      需要tags,值为在gitlab-runner注册的时候设置的
    stages:
      - deploy
     
    deploy_develop:
      stage: deploy
      tags:
        - nodejs
      script:
        - echo "hello,ci/cd"
      only:
        - dev
    
    1. 遇到使用git clone拉取代码权限问题
      我安装gitlab-runner的时候使用的是新建的一个用户,然后在gitlab-runner的安装机器上使用git clone代码时报权限问题。
      需要将gitlab对应的公钥加到用户的.ssh/目录下面

    经过上面的步聚,基本的CI就完成了,在以后的开发中,只需要将代码合到相应的分支,就会按照.gitlab-ci.yml里面的脚本构建了,记得在上家公司刚看到这个的时候感觉好厉害呀,只不过一直没动手弄过,今天自已动手试了下不光印象要深刻些,感觉也没有像以前那么神秘了。

    我这个只是跑通了基本的,接下来还用弄nodejs和webpack前端打包这个,这个到时候弄一个shell脚本,然后定义在gitlab-ci.yml里面就行了。

    PS:这里不得不喷下公司的运维,平时啥事都不干,四个运维除了平时发个版本一点事情没有,而且不管是环境还是什么,从来不管的,都是开发自已在弄。要一个线上的只读权限库也不肯给,说有安全问题,线上的有些问题完全没法查。

    而且,更可笑的时,线上的发版你都没法想像,都是我们本地打成压缩包到指定的文件夹,然后他们再一台台机器发布,什么年代了,还整得这么原始。有这时间好好研究下现在的工具提高效率多好。关键是我们的leader也差不多这想法,导致这种事一直压着。

    就像今天安装Ci这个,我开始以为gitlab-runner一定要装在gitlab的机器,去找他们开权限,结果他们以没有听过Ci是啥和可能有安全性为由拒绝了,后面看到官方文档说可以不在一台机器,就找了一台我们部门内部的一台测试机安装的。哎,真是无语了。

    程序员的危机大部分也是自已造成的,自已不思进取。等那天被淘汰时,又会责怪现实的无情,须不知这一切和自已有很大的关系,很庆幸我还一直在努力,保持学习的习惯。

  • 相关阅读:
    Junit研究心得——准备研究Junit
    Nginx proxying for Tomcat applications
    将工厂模式升华为插件式框架【文摘】
    JIRA中输入验证时,将验证错误“InvalidInputException”写到对应字段顶部,而不是页面顶部。
    Junit研究心得——Junit中的Annotation
    Junit研究心得——Junit中的约定规则
    Java 编程的动态性【文摘】
    插件式设计开发心得(一)【文摘】
    Java SE 6 新特性: Instrumentation 新功能
    php实现首页自动选择语言跳转
  • 原文地址:https://www.cnblogs.com/smartrui/p/10836038.html
Copyright © 2020-2023  润新知