当前位置: 首页 > Web前端 > HTML

gitlab-ci从入门到1差点放弃

时间:2023-03-28 10:38:25 HTML

前言之前一直在用Jeakins部署。最近了解了gitlab-ci,想试试。一路上我遇到了很多陷阱。简单记录一下,然后说说自己对部署的一些理解。2.gitlab-ci简介我对前端CICD的理解是,代码经过各种本地验证后,不断集成到远程分支,然后触发一系列动作(安装、打包、测试、部署等).一般需要两台服务器,一台是ci服务器,用于运行各种任务(安装、打包、测试、部署等),另一台是部署服务器,可以是nginx,用来展示静态资源。Jeakins可以理解为一个ci服务器。当然gitlab本身也提供了一个ci服务器,就是gitlab-ci。这期间遇到了很多坑,差点崩溃。如果安装runner的坑是gitlab项目,在setting-cicd中,左边是私有runner,右边是别人提供的runner。runner可以简单理解为ci服务器上运行的ci服务,但是需要注意的是别人的runner不一定适用于你,因为别人的ci服务器上的环境可能是java环境,并且node没有安装,一些你需要的全局包也没有安装。所以一般需要做一个适合自己项目的前端通用runner。第一步:runner服务器选择首先,如果你是个人的gitlab项目,那么你可以随便找一个服务器。但是你是公司项目,最后找个公司内网服务器安装。应该是外网服务器可能无法访问你们公司搭建的gitlab。第二步:安装runner方法。如果选择安装,可以参考官网进行安装。有几种方法。但是对于我来说,因为公司的服务器无法访问Science~Internet~,导致下载安装包非常慢,慢到崩溃。所以我直接采用先下载安装包再安装的方式。注意linuxx86_64对应的安装包是amd64,不要下载错了。第三步:安装全局依赖包。runner只是ci服务器中的一项服务。如果您在本地找不到包,您仍然必须在全球范围内找到它。所以ci服务器需要安装一些常用的全局包比如gitnvm(管理节点)nrm(管理npm源)vue-cli-serve等。第4步:注册跑步者。注册非常简单。实际上runner和gitlab建立了一个链接。gitlab-runnerregister按照提示一步一步来就行了。ci服务器必须能够连接到gitlab。token和url可以在setting-runner中找到完成后可以发现多了一个customrunner,可以使用了。第5步:更改运行器权限必须使用root权限执行。默认用户runner公司的服务器不识别sudogitlab-runneruninstall#删除gitlab-runnergitlab-runnerinstall--working-directory/home/gitlab-runner--userroot#安装并设置--user(设置为root)sudoservicegitlab-runnerrestart#重启gitlab-runnerpsaux|grepgitlab-runner#查看当前runner用户添加.gitlab-ci.yml文件,gitlab每次提交都会根据该文件启动runner。具体含义大家可以自行搜索,我只提几个重点。runner有名字,我的runner叫fyy,tag参数用来执行需要触发的runner阶段。一般是三个阶段(加上单元测试、集成测试等代码检测,可以是四个)。每个阶段完成,生成的文件都会被删除,所以需要缓存。only参数指定哪些分支更改只会触发运行器的参考脚本。stages:-install-build-deploycache:#Cachepaths:-node_modules-dist第一阶段-install:tags:-fyystage:installscript:-pnpminstall-echo'依赖安装成功!only:-mono-dpsecondstage-build:tags:-fyystage:buildscript:-pnpmbuildTest-echo'测试环境代码成功打包!only:-mono-dpthirdstage-deploy:tags:-fyystage:deployscript:#具体的部署方式,这里是常规部署,或者容器化部署-cddist-tar-cfdist.tar--exclude=。/dist.tar。-具体shell脚本(ssh链接、复制到指定目录、解压等)only:-mono-dpnpm安装的坑这时候基本ok了,mono-dp上推会触发ci运行,可以看到管道中的过程。我遇到的问题是安装npm的时候会报一些错误。这应该是我的pnpm.lock文件有问题导致的。解决问题,可以直接登录远程服务器手动尝试。在runner的项目目录下手动签入/home/gitlab-runner/builds/-qUnF6qy/0/webproject/convergencemarketing/npminsatllbuild。这个时候不要走ci流程,会很慢。我在runner打包的坑里遇到的问题是项目依赖了一些全局的包。比如有一个叫chalk的包,Package里面没有写。当它在CI中时,会因为不在Package中而无法安装,导致打包错误。解决方法是排除故障。接下来项目不要依赖全局包,全部改成本地包,但是vue-cli-serve没办法,只能在ci服务器全局安装。4.总结与思考最后,突出成功的截图。很相似,比较适合团队开发和大型项目开发,流程比较清晰。但也有缺点。感觉很慢。我的项目大约需要12分钟。它仍然有pnpm+缓存。对于像我这样的小公司和小项目,是不是直接打包上传本地部署比较合适(用自己写的部署服务,或者直接用上传软件或者自定义插件)(可以控制在1分钟以内)。