最近在项目中想用一下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,哪你就需要拥有管理员权限,如图,找到库的url
和token
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 jobs
为No,那你需要在你gitlab-ci.yml文件中指定你要使用runner的tag,才能运行对应的runner,否则你任务可能一直在pending状态,找不到runner执行。
未指定runner时,如图1,图2:
图1
图2
⚠️注意:使用webpack打包打时候,别使用
webpack-bundle-analyzer依赖关系可视化这个插件,这会导致runner接收不到结束状态,不会进行下一步
指定runner如图:
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的状态可用
image.pnggitlab-runner status
查看,如图:
如果你用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
网友评论