美文网首页
前端使用gitlab-ci持续集成(+scp实现自动化部署)ma

前端使用gitlab-ci持续集成(+scp实现自动化部署)ma

作者: _嗯_哼_ | 来源:发表于2019-05-10 12:15 被阅读0次

    最近在项目中想用一下gitlab-ci(gitlab continuous integration持续集成)来对项目进行自动化部署,这篇文章会提到自己所踩过一些坑(其实也不算坑,只是自己之前对这块对了解为零而已)。算是自己做对笔记,也希望能帮组到刚开始玩这个到小伙伴~~~

        其实能啃动官方的因为文档也是挺简单的gitlab-ci官方文档
    原理步骤:
      原理:简单说就是我们在push完代码之后,想让我们的代码自动进行构建(包括编译,发布,自动化测试)),那由谁来执行这个过程呢?
    答:用gitlab-runner来执行

    实践

      步骤:只需做两件事情
        1、添加 .gitlab-ci.yml在项目的根目录(会自动触发Pipelines)
        2、配置一个Runner
            在这之前你首先需要知道它有两个东西来支撑:
    1、gitlab-ci server :负责调度、触发Runner,以及获取返回结果
    2、gitlab-ci-runner:负责来跑自动化CI的一个宿主机子

    开始

      1.直接在你的项目根目录添加一个.gitlab-ci.yml文件,至于里面具体怎么配置可以看官方解释更好,gitlab-ci
      2.配置runner(mac版本)
        2.1 使用Homebrew 安装gitlab-runner(Homebrew是mac的一个安装工具)

    brew install gitlab-runner
    

    看过一些文章会告诉你接着执行gitlab-runner install,但是先不要执行这个,这个不是安装gitlab-runner,而是service的指令

        2.2 注册runner

    打开你的项目(需要maintainer权限):settings->CI/CD,选择Runners settings,如图

    图一
    图二
    记住图二所标注的1.url    2.token
    如果你要注册一个shared Runner共享runner,哪你就需要拥有管理员权限,如图,找到库的urltoken
    image.png

    然后执行:

    gitlab-runner register
    
    image.png

    到这里 你看你的gitlab的runner设置里面就有一个runner了 ,如图:

    image.png
    • url:私有git的路径
    • token:项目的token,用于关联runner和项目
    • name:runner的名字,用于区分runner
    • tags:用于匹配任务(jobs)和执行任务的设备(runners)
    • executor:执行环境
      image.png
      注意:如果你设置了Can run untagged jobsNo,那你需要在你gitlab-ci.yml文件中指定你要使用runner的tag,才能运行对应的runner,否则你任务可能一直在pending状态,找不到runner执行。
      未指定runner时,如图1,图2:
      图1
      图2

    ⚠️注意:使用webpack打包打时候,别使用webpack-bundle-analyzer依赖关系可视化这个插件,这会导致runner接收不到结束状态,不会进行下一步
    指定runner如图:

    image.png

        2.3 install & start service
    前面我已经提到过,先不用执行gitlab-runner install。现在该它上场了
    runner作为等待被派发任务的设备,如果只能通过run sudo gitlab-runner run来前台执行就太蠢了。gitlab-runner也提供了service,用来后台响应git服务器的任务分发。

    gitlab-runner install
    gitlab-runner start
    

    注意:查看当前runner的状态可用 gitlab-runner status查看,如图:

    image.png
    如果你用gitlab-runner servcie,那它会随着机器自己启动,不用自己去再启动。建议,将runner部署在一台24小时不关机的服务器上。

    接下来,使用ssh免登录的方式使用scp将本地文件上传到远程的linux服务器

    ssh登录Linux通常有两种方法:用户名密码登录、用户名公钥登录;使用用户名密码登录每次都要输入密码,相当麻烦,而使用用户名公钥登录则可以避免这个问题。

    1、本地生成公钥和私钥

    ssh-keygen -t rsa -C  'your email@domain.com'
    
    #-t 指定密钥类型,默认即 rsa ,可以省略
    #-C 设置注释文字,比如你的邮箱,可以省略
    

    生成过程中会提示输入密码两次,如果不想在使用公钥的时候输入密码,可以回车跳过;
    密钥默认保存位置在 ~/.ssh 目录下,打开后会看到私钥文件 id_rsa 和公钥文件 id_rsa.pub;

    cd ~/.ssh #切换到ssh下
    ls #查看ssh目录下的文件  id_rsa.pub公钥  id_rsa私钥
    

    2.复制公钥至服务器

    使用 scp 命令将本地的公钥文件 id_rsa.pub 复制到需要连接的Linux服务器:

    scp ~/.ssh/id_rsa.pub <用户名>@<Linux的ip地址>:/home/id_rsa.pub
    /* 如:scp ~/.ssh/id_rsa.pub root@172.29.213.23:/home/id_rsa.pub */
    

    如果修改了ssh默认连接端口的话,需要加上端口信息:

    scp -P <端口号> ~/.ssh/id_rsa.pub <用户名>@<Linux的ip地址>:/home/id_rsa.pub
    

    登录Linux服务器,把公钥追加到服务器ssh认证文件中:

    cat /home/id_rsa.pub >> ~/.ssh/authorized_keys
    
    截图

    这时候在本地终端中使用用户名和ip登录就不需要密码了:

    ssh <用户名>@<Linux服务器ip>
    // 如: ssh root@172.29.213.21
    
    image.png

    如果修改了ssh默认连接端口的话,需要加上端口信息:

    ssh -p <端口号> <用户名>@<ip地址>
    
    image.png

    3.使用scp 上传文件到linux服务器指定目录

    scp -r ./dist "root@172.19.213.22:/opt/war/zhzg-mobile"
    

    将dist目录上传到服务器到/opt/war/zhzg-mobile目录下
    然后将上面到指令放到gitlab-ci.yml来执行,预防后期操作较多,所以我没有直接将上面指令写到script,而是使用了一个.sh文件来执行上面到指令,如图:

    image.png
    image.png

    好了,至此,你可以push你到代码了。它会帮助你自动部署到服务器

    image.png

    参考文档:https://juejin.im/post/5b1a4438e51d4506d1680ee9

    相关文章

      网友评论

          本文标题:前端使用gitlab-ci持续集成(+scp实现自动化部署)ma

          本文链接:https://www.haomeiwen.com/subject/bovgoqtx.html