GitLab CI/CD流水线配置案例

鸿辰 Git 408

概述

这是一份GitLab CI/CD流水线的配置示例,如果你在开发中有这样的需求,如将提交的代码自动更新到测试服务器,或将打了标签/发布版本的代码自动更新到正式服务器(可能是演示环境),那么可以参考该文章的方式实现。

准备工作

  • 确保你的runner已经存在

GitLab CI/CD流水线配置案例-第1张图片-鸿辰个人分享站

如上图中表示的是存在4个runner,每个runner都存在一个标签,这个标签在后续配置流水线时可以通过设置标签实现指定哪一个runner运行。

  • 确保你的项目根目录下存在一个 .gitlab-ci.yml 文件,这是GitLab CI/CD的配置文件

.gitlab-ci.yml 文件配置示例

# usermod -aG docker gitlab-runner

# 定义阶段
stages:
  # 发布
  - deploy

# 定义变量
variables:
  # docker容器名称
  DOCKER_CONTAINER_NAME: api-gateway
  # 测试站项目目录
  TEST_DIR: /web/api-gateway
  # 正式站项目根
  PRODUCT_DIR: /web/api-gateway

# 发布测试版
deploy_test:
  stage: deploy
  script:
    - echo "==============开始部署测试版==============="
    # 通过脚本实现部署,脚本内容参考后文
    - chmod a+x ./scripts/deploy_test.sh
    - ./scripts/deploy_test.sh
    - echo "==============结束部署测试版==============="
  only:
      # 这里的dev是开发分支,根据情况调整
    - dev
  tags:
      # 这里的是runner的标签,表示使用哪个runner执行
    - deploy-runner

# 发布正式版
deploy_production:
  stage: deploy
  script:
    - echo "==============开始部署正式版==============="
    # 通过脚本实现部署,脚本内容参考后文
    - chmod a+x ./scripts/deploy_production.sh
    - ./scripts/deploy_production.sh
    - echo "==============结束部署正式版==============="
  only:
      # 这里的tags表示当创建了新的tag标签时运行
    - tags
  tags:
      # 这里的是runner的标签,表示使用哪个runner执行
    - deploy-runner

部署脚本参考示例

测试站脚本参考

#!/usr/bin/env bash

# 使用ssh命令登录服务器
ssh -p 22 -tt root@192.168.0.2 <<serverssh

# 切换到项目目录
cd $TEST_DIR/

# 拉取最新的代码
git pull

# 更新项目(这里使用的是PHP项目作为演示,需要更新composer包,其他项目根据情况调整)
docker exec $DOCKER_CONTAINER_NAME composer update

# 这里是单独定义了项目名称为gateway

# 移除并重新构建项目
docker compose -p gateway down
docker compose -p gateway up -d

# 结束部署
exit
serverssh

正式站脚本参考

#!/usr/bin/env bash
ssh -tt root@192.168.0.3 <<serverssh
cd $PRODUCT_DIR/
git checkout main
git pull

# 切换到对应的标签
git checkout $CI_COMMIT_REF_NAME

docker exec $DOCKER_CONTAINER_NAME composer update

# 这里使用了$DOCKER_CONTAINER_NAME变量作为项目名称
docker compose -p $DOCKER_CONTAINER_NAME down
docker compose -p $DOCKER_CONTAINER_NAME up -d
exit
serverssh

其他说明

  • 你需要先在测试站或则正式站拉取git项目到对应的目录,这样做是防止需要输入git的账号密码,同时应该配置将git的账号密码储存起来,避免重复输入。可使用如下命令实现
git config --global credential.helper store

#推荐阅读

标签: git gitlab