Gitlab有自带的CI/CD功能,只需要在项目根目录新建一个.gitlab-ci.yml
文件,推送到仓库中,即可创建一个pipeline,并通过注册好的runner部署、运行项目
1.注册gitlab-runner
gitlab-runner相当于gitlab代码仓库和服务器之间的中间人,当我们触发了pipelines中的任务,它就可以将代码仓库中的代码拉到服务器,执行我们配置好的脚本,从而实现自动部署
注意:为保持前后一致,所有命令都要以sudo权限运行
- 安装
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
sudo apt-get install gitlab-ci-multi-runner
- 注册
sudo gitlab-runner register
①URL以及token,去gitlab项目中的setting中复制,如下图:
②tag
tag是作为这个gitlab-runner的标识,此后在.gitlab-ci.yml
文件中配置的时候需要用到
③是否运行在没有tag的build上面
选true
④选择执行器
选shell
2.启动gitlab-runner
- install
sudo gitlab-runner install -n "service_name" -d /home/ubuntu -u ubuntu
-n: 服务名称
-u: 以哪个用户的身份执行部署脚本中的shell命令
-d: 工作目录(如果不指定,则默认是执行install命令时所在的路径)
- start
sudo gitlab-runner start -n "service_name"
这里的service_name即install时指定的名称
启动成功之后就可以在gitlab settings –> CI/CD –> Runners 下查看新增的runner,显示绿色则表示启动成功
3.配置.gitlab-ci.yml
关于gitlab-ci.yaml中各项配置的含义,详见:https://juejin.im/post/6844904045581172744
在项目根目录下新建
.gitlab-ci.yml
文件,配置构建时需要执行的一些列操作。以下是Django项目部署的一个示例:stages:
- build
- test
variables:
DEPLOY_PATH: "/home/ubuntu/deploy/car_wash/" # 项目的部署路径
PYTHON_PATH: "/home/ubuntu/.pyenv/versions/car_wash/bin" # python可执行文件(bin)的路径
build-job:
stage: build
script:
- sudo cp -r $CI_PROJECT_DIR/* $DEPLOY_PATH # 将gitlab-runner拉下来的代码复制到部署路径
- cd $DEPLOY_PATH
- sudo $PYTHON_PATH/pip install -r requirements.txt # 安装依赖
- $PYTHON_PATH/python CarWash/manage.py migrate # 执行迁移
- sudo supervisorctl restart car_wash # 使用supervisor重启服务
- sudo supervisorctl restart celery
tags:
- CarWash
only:
- master
environment:
name: prod
test-job:
stage: test
script:
- cd $DEPLOY_PATH
- $PYTHON_PATH/python CarWash/manage.py test Common --keepdb # 执行测试
tags:
- CarWash
only:
- master
environment:
name: prodstage
定义一次pipeline需要执行的构建步骤,比如部署代码—>执行测试—>部署到生产环境;
每个stage可以包含多个job,同一个stage下面的job并行执行;
- variables
变量,可以自定义一些下面job中需要用到的变量,如项目路径等;
gitlab也有一些系统预设的变量,比如$CI_PROJECT_DIR
是gitlab-runner将代码从仓库中拉下来之后存放的路径;
对于一些不方便写到配置文件中的私密变量(如secrect key、SSH key等),可以在gitlab的 settings–>CI/CD–>variables 中配置;
- job
具体执行的构建动作,每个job必须指定对应的stage
- script
执行的命令
- tags
指定以哪个gitlab-runner来执行该job,这里需要和注册gitlab-runner时指定的tag对应
- only
限定git分支
- environment
用于定义一个job部署到的环境,定义了之后会自动创建一个环境,在gitlab的Operations –> Environments 中可以看到该环境下执行的job,并进行重新部署、回滚等操作
- 将
.gitlab-ci.yml
文件推到(push)代码仓库之后,就可以发现pipeline已经创建,点击进入查看详细日志 - 状态为passed则表示部署成功
- Vue项目部署配置示例
stages:
- build
variables:
DEPLOY_PATH: "/home/ubuntu/deploy/car_wash_admin/" # 项目的部署路径
build-job:
stage: build
script:
- cd $CI_PROJECT_DIR # 进入代码目录
- rm -rf $CI_PROJECT_DIR/node_modules
- npm install # 安装依赖
- npm run build # 打包构建
- cp -r $CI_PROJECT_DIR/dist/* $DEPLOY_PATH # 将打包完成的文件复制到部署路径
- sudo nginx -s reload # 重启Nginx
tags:
- car_wash_admin_tag # gitlab-runner tag
only:
- master # 允许部署的分支
environment:
name: prod # 环境名称3.参考链接
https://www.jianshu.com/p/306cf4c6789a
https://www.jianshu.com/p/2b43151fb92e
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!