概述
这是一份GitLab CI/CD流水线的配置示例,如果你在开发中有这样的需求,如将提交的代码自动更新到测试服务器,或将打了标签/发布版本的代码自动更新到正式服务器(可能是演示环境),那么可以参考该文章的方式实现。
准备工作
- 确保你的runner已经存在
如上图中表示的是存在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
#推荐阅读
说明用于代码托管在gitlab,提交后通过gitlab-ru...
文章来源:
鸿辰
版权声明:本网站可能会转载或引用其他来源的文章、图片、数据等信息。对于这些转载内容,版权归原作者所有。本站尊重原作者的劳动成果,并在可能的情况下注明来源和作者。如有任何版权问题,请及时联系,收到后将第一时间处理。