从部署ubuntu到gitlab-ci实战

前言

近期由于升级部署工具,顺便捋了一下构建流程。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目录内可以开启和关闭开放注册,如果注册关闭则每次注册都需要管理员通过才可以创建账户。
    image.png
  • 局域网内通过输入这台机器的ip就可以直接访问gitlab页面,我这里是172.17.88.138
    image.png
  • 试着在gitlab中创建项目test_1,当然也可以通过绑定token通过OPEN API来创建
    image.png

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进行项目分配
    image.png
  • 在具体分配的项目中就可以看到运行中的runner了,如图
    image.png

运行

  • 在拉取项目到本地后,我们简单的创建一个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已经运行起来了,在打印中可以看到脚本内的输出
    image.png
  • 我在部署期间遇到了一些坑

    • 报错: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完成所有任务。

你可能感兴趣的:(从部署ubuntu到gitlab-ci实战)