前言

近期因为降级部署工具,顺便捋了一下构建流程。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#是否锁定以后我的项目RunnerWhether to lock Runner to current project [true/false]:[false]: trueRegistering runner... succeeded                     runner=Gvcpo9H8#在这里须要输出runner的执行形式,因为我的Gitlab和runner是装置在同一台服务器上的,间接输出shellPlease 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  - deployjob_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实现所有工作。