美文网首页
前端使用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