从部署ubuntu到gitlab-ci实战

前言 近期由于升级部署工具,顺便捋了一下构建流程。gitlabCI是代码提交后比较重要的一个环节,因为我这边ubuntu本地电脑也部署了一套gitlab服务,顺便看下自动化部署都需要做哪些工作,对于我们前端来说对web工程化也有更进一步的了解。
OS环境搭建 【从部署ubuntu到gitlab-ci实战】我这边是选用的一台比较老的笔记本(刚刚达标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目录内可以开启和关闭开放注册,如果注册关闭则每次注册都需要管理员通过才可以创建账户。
    从部署ubuntu到gitlab-ci实战
    文章图片
  • 局域网内通过输入这台机器的ip就可以直接访问gitlab页面,我这里是172.17.88.138
    从部署ubuntu到gitlab-ci实战
    文章图片
  • 试着在gitlab中创建项目test_1,当然也可以通过绑定token通过OPEN API来创建
    从部署ubuntu到gitlab-ci实战
    文章图片
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 registerPlease 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... succeededrunner=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进行项目分配
    从部署ubuntu到gitlab-ci实战
    文章图片
  • 在具体分配的项目中就可以看到运行中的runner了,如图
    从部署ubuntu到gitlab-ci实战
    文章图片
运行
  • 在拉取项目到本地后,我们简单的创建一个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已经运行起来了,在打印中可以看到脚本内的输出
    从部署ubuntu到gitlab-ci实战
    文章图片
  • 我在部署期间遇到了一些坑
    • 报错: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完成所有任务。

    推荐阅读