GitLab Runner实现自动化部署

KarlXu 2022-04-14 22:51:41原创浏览量1071

gitlab 搭配 gitlab runner 的 CI/CD 在项目中实现自动化部署、前端文件打包,也是最简单的部署方式

关于 gitlab 和 gitlab runner 的安装方式网上有很多教程这里不过多赘述

需要注意的是如果你的项目是搭配 web 服务运行,那么 runner 是的安装和启动用户最好选择和 web服务器 相同的用户或用户组

否则会遇到权限问题导致无法拉取仓库代码,当然你也可以用 shell 脚本去解决此问题

你可以在 gitlab runner 安装时指定用户

gitlab-runner install --working-directory /home/gitlab-runner --user root注册Gitlab Runner
  1. 运行下面命令开始注册

    gitlab-runner register
  1. 输入你的 GitLab 实例 URL 和 注册Runner的令牌

    Enter the GitLab instance URL (for example, https://gitlab.com/):
                   
    Enter a description for the runner:

    在 GitLab 的 UI 项目中依次找到 设置 -> CI/CD -> Runner 即可看到配置信息

    每个项目都有自己的 token 用来区分注册的 Runner 服务的项目

    每个项目也可以创建多个 Runner 用来区分不同的服务器和环境

    image-20220414215447865

  1. 输入 Runner 的描述

    Enter a description for the runner:
  2. 输入与 Runner 关联的标签

    # 此标签最好和项目环境关联在后面会用到
    Enter tags for the runner (comma-separated):
  3. 输入 Runner 的执行方式

    # 根据你的环境选择,后续步骤用 shell 的方式演示
    Enter an executor: custom, docker-ssh, ssh, virtualbox, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, shell:

到此为止,一个仓库的 Runner 便注册完成

通过 gitlab-runner list 查看已经注册的 Runner 列表

通过 gitlab-runner verify --delete --name 你的Runner 删除

也可以在 GitLab 的 UI

通过 .gitlab-ci.yml 来实现自动化部署

下面通过案例实现前端自动化部署和自动打包

  1. 在项目根目录下新建文件 .gitlab-ci.yml

    # CI/CD 执行流程包含三个 Stage 可根据具体情况增加流程
    # build 被首先执行。如果发生错误,本次 CI 立刻失败
    # test 在 build 成功执行完毕后执行。如果发生错误,本次 CI 立刻失败
    # deploy 在 test 成功执行完毕后执行。如果发生错误,本次 CI 失败
    tages:
    - deploy

    # job 名称,这里对应测试服务器
    develop:
    stage: deploy # 对应上面的 Stage
    only: # 监听的分支,这里只监听 develop 分支 代表测试环境
    - develop
    script: # 执行的脚本的脚本,与注册 Gitlab Runner 流程中第 5 步选择的方式 shell 一致,下面会创建一个脚本案例
    - sh /home/shell/admin-develop # 脚本的路径
    tags: # Runner 关联的标签 与注册 Gitlab Runner 流程中第 4 步输入的名称一致
    - runner-name

    # job 名称,这里对应正式环境服务器
    master:
    stage: deploy
    only:
    - master
    script:
    - sh /var/shell/admin-master
    tags:
    - runner-name
     
    # 更多语法可以去查找相关资料实现更复杂的功能,比如识别到提交代码打 tag 时执行 npm install 等等
  2. 在服务器创建 shell 脚本

    #!/bin/bash

    # 仓库地址
    GIT_URL='git@119.xxx.xxx.238:project/project.git'
    # 项目路径
    WEB_PATH='/path/project'
    # 执行脚本的用户和用户组
    WEB_USER='user'
    WEB_USERGROUP='user'

    # 切换到项目目录下
    cd $WEB_PATH

    # 文件不存在,主动克隆
    if [ ! -d ".git" ]; then
          git clone $GIT_URL .
    fi

    # 切换到 develop 分支并拉取最新代码
    git reset --hard origin/develop
    git clean -f
    git pull
    git checkout develop

    # 代码进行打包,打包后会生成 dist2 文件,这里根据实际项目编写对应脚本
    npm run build:stage
    // 先删除
    rm -rf dist/*
    cp -R dist2/* dist/

    # 重新设置文件权限
    chown -R $WEB_USER:$WEB_USERGROUP dist

    exit 0
  3. 完成以上工作以后,每当提交代码时 Gitlab Runner 会去项目查找 .gitlab-ci.yml 文件,根据文件的配置执行 CI/CD 流程

    可以在 GitLab 的 UI 中的 设置 -> CI/CD -> Runner 中查看项目已经注册的 Runner

    image-20220414224142848

  4. 每次提交代码后可以通过 GitLab 的 UI 中的 CI/CD -> 流水线 查看 Runner 的执行情况

    image-20220414224354811

Done,have a good day ~~


有问题请Email联系: karlxu0424@gmail.com