共计 3573 个字符,预计需要花费 9 分钟才能阅读完成。
前言
近期因为降级部署工具,顺便捋了一下构建流程。gitlabCI 是代码提交后比拟重要的一个环节,因为我这边 ubuntu 本地电脑也部署了一套 gitlab 服务,顺便看下自动化部署都须要做哪些工作,对于咱们前端来说对 web 工程化也有更进一步的理解。
OS 环境搭建
我这边是选用的一台比拟老的笔记本(刚刚达标 4g 内存)试验,选用了 ubuntu 20.04.4 X64 的零碎
- 拜访 https://cn.ubuntu.com/downloa… 下载 ubuntu 桌面版的镜像
- u 盘通过 https://www.laomaotao.net/ 老毛桃制作为 U 盘启动工具
- 将 ubuntu.iso 镜像文件拷贝到 U 盘 LMT 根目录后插到笔记本上
- 启动笔记本抉择 U 盘启动,抉择载入 Ubuntu.iso 镜像
- 装置结束后启动 ubuntu 零碎
gitlab 装置
- ctrl+a/t+ t 疾速关上 Ubuntu 的终端窗口
-
更新 apt 工具
sudo apt update
-
装置 openssh(可选,次要是配置邮件发送性能)
sudo apt install ca-certificates curl openssh-server postfix
-
gitlab 有社区版和企业版,企业版须要付费,那么就选社区版(CE)吧
sudo apt install gitlab-ce
这里遇到一个坑就是如果没有迷信上网的话下载会特地特地慢,遇到同样状况的同学倡议尽早切换下 apt 的源(https://blog.csdn.net/qq_2109…)
-
装置结束后,在 /etc/gitlab/gitlab.rb 目录中会有 gitlab 配置项,比方:
- external_url 更改 http 为 https,会主动将用户重定向到受加密证书爱护的站点
- letsencrypt[‘contact_emails’] 设置定义一个电子邮件地址列表
-
如果有配置批改,则需重新配置
sudo gitlab-ctl reconfigure
-
在启动前咱们须要吧默认的 root 用户明码备份下,关上 initial_root_password
sudo gedit /etc/gitlab/initial_root_password
-
启动 gitlab 服务
sudo gitlab-ctl restart
gitlab 应用
胜利启动后就能够通过浏览器拜访 127.0.0.1 关上 gitlab 治理页面,输出 root 和 initial_root_password 的初始密码就能够进入相熟的界面了
- 在 root 身份进入页面后,点击左上角的 menuAdmin–>settings –> Sign-in Restrictions 目录内能够开启和敞开开放注册,如果注册敞开则每次注册都须要管理员通过才能够创立账户。
- 局域网内通过输出这台机器的 ip 就能够间接拜访 gitlab 页面,我这里是 172.17.88.138
- 试着在 gitlab 中创立我的项目 test_1,当然也能够通过绑定 token 通过 OPEN API 来创立
gitlab CI 配置
Gitlab CI 是 gitlab 的一部分,最大的作用是治理各个我的项目的构建状态,因而,运行构建工作这种浪费资源就交给了 gitlab runner 来做了。gitlab runner 能够装置到不同的机器上,所以在构建工作运行期间并不会影响到 gitlab 的性能。现实状况下,不应将 GitLab Runner 与 GitLab 装置在同一台机器上。我这边测试机器就一台,就暂且都装到一起吧。
runner 类型
runner 简略说次要有三种 gitlab-runner:
- share runner 能够为所有 gitlab 内的我的项目应用
- group runner 能够为特定项目组下的我的项目应用
- specific runner 只能为指定我的项目应用
在 gitlab admin area 中能够治理你 gitlab 所有注册的 runners,share runner 能够转为 group runner 或者 specific runner,然而不能够逆转。
装置
-
装置 runner 须要先增加 gitlab 的存储库
sudo apt-get install curl // 如果没有装置 curl 工具执行 curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
-
装置最新版本的 GitLab Runner
sudo apt-get install gitlab-runner
注册 / 配置
-
执行如下命令,并填入根本信息
gitlab-ci-multi-runner register Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/): http://172.17.88.138/ #输入您的 GitLab 实例 URL #输入您取得的令牌以注册 Runner:Please enter the gitlab-ci token for this runner: Gvcpo9H8fMxSykFspvG6 #输出 Runner 的形容,您能够稍后在 GitLab 的 UI 中进行更改:Please enter the gitlab-ci description for this runner: [localhost.localdomain]: demo #输出与 Runner 关联的标签,您能够稍后在 GitLab 的 UI 中进行更改:Please enter the gitlab-ci tags for this runner (comma separated): vue-tag #是否运行未加标签的构建 Whether to run untagged builds [true/false]: [false]: true #是否锁定以后我的项目 Runner Whether to lock Runner to current project [true/false]: [false]: true Registering runner... succeeded runner=Gvcpo9H8 #在这里须要输出 runner 的执行形式,因为我的 Gitlab 和 runner 是装置在同一台服务器上的,间接输出 shell Please enter the executor: docker+machine, docker-ssh+machine, docker, parallels, ssh, virtualbox, kubernetes, docker-ssh, shell: shell #呈现这样信息示意服务端的配置就曾经胜利完结了,如果须要应用到主动构建,还须要再增加一个配置文件,上面说说这个。Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
- 初始化后的配置能够通过 root 身份,关上 adminArea 菜单,在 overview=>runners 中抉择对应的 runner 进行配置,当然也能够将 runner 进行我的项目调配
- 在具体调配的我的项目中就能够看到运行中的 runner 了,如图
运行
-
在拉取我的项目到本地后,咱们简略的创立一个 ci 配置 (.gitlab-ci.yml)
stages: - build - deploy job_build: stage: build only: - master script: - echo "测试 打包" job_build: stage: deploy only: - master script: - echo "测试 部署"
- 因为我这边 runner 没有配置 tag,所以脚本内没有注明 tag。推送到 master 后,会看到我的项目 pipelines 曾经运行起来了,在打印中能够看到脚本内的输入
-
我在部署期间遇到了一些坑
- 报错:This job is stuck, because you don’t have any active runners that can run this job,因为注册时抉择了不在没有 tag 标记的 job 上运行,在 runner 设置中改为 true 就好了
Can run untagged jobs: [false/true]
- 另外一个可能就是 gitlab runner 默认运行时 user mode,须要晋升权限
sudo gitlab-ci-multi-runner run
总结
em。。。。其实部署 OS 环境搭建,gitlab 服务部署还算是比较顺利。在 runner 启动后的配置里会有比拟多的问题,runner 启动实例会心跳调用指标 gitlab 服务的 API,一直的获取 gitladeb 推送状态,而后执行相应的.gitlab-ci.yml 脚本。捕捉到对应脚本后依照串行 stage=> 并行 job=> 串行 job 内的 script 实现所有工作。