使用步骤
1. 必要条件:需要有运行中的gitlab-runner。<我们的后端大佬帮忙安装了,并且在管理员设置中给项目共享了runner。>
2. 使用shell脚本方式来实现,在项目根目录下创建.gitlab-ci.yml文件
# default # 可以给 after_script before_script 等作业设置默认值
# 定义作业组的阶段
stages:
- install
- test
- build
- deploy
# global variables 公共的变量 如果作业组中定义了相同的变量,以作业为主
variables:
DEFAULT_VARIABLE: 'default-deploy'
DEVELOPMENT: 'deployment'
PRODUCTION: 'production'
# workflow定义流水线
# workflow:
# rules:
# - if $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
# variable
# install 安装依赖
install:
stage: install
only:
- dev
- master
script:
- echo "---start install---"
- sudo nvm alias default v16.20.1
- sudo pnpm install
- echo "---end install---"
# test 代码检查
test:
stage: test
only:
- dev
- master
script:
- pnpm run CheckAll
# 打包
build:
stage: build
script:
- echo "---start build---"
- pnpm run build
- echo "---end build---"
artifacts:
paths:
- dist # 打包文件
# deploy
# 开发环境部署
deploy_dev:
stage: deploy
only:
- dev
script:
- scp -r dist/* user@$SERVER_IP:/home/user/www/security-management-platform.$DEVELOPMENT.com/ # 把dist目录下文件递归复制到服务器下的地址
# 生产环境部署
deploy_master:
stage: deploy
only:
- master
script:
- scp -r dist/* user@$SERVER_IP:/home/user/www/security-management-platform.$PRODUCTION.com/ # 把dist目录下文件递归复制到服务器下的地址 scp -r -r是
3. 修改代码并提交对应的分支,触发流水线。
步骤大概就是这样但是因为第一次搞这个,真是一步一坑。下面是过程中遇到的问题:
踩坑1
fatal: git fetch-pack: expected shallow list;
fatal: the remote end hung up unexpectedly
在流水线中查看作业组的状态,发现有这样的错误。这是因为git版本过低导致的,需要升级git版本。参考下面大佬的博客
gitlab自动发布常见错误及解决_logseq在gitlab 自动发布_W如Q扬的博客-CSDN博客
踩坑2
在这一步遇到了nvm、npm、pnpm命令找不到的问题,推测是权限不够。可以参考下面文章,目前还没完全解决问题,待成功后继续更新文档。
命令_Gitlab CI 失败:未找到 NPM 命令_IT常识
使用上面的方法没有解决找不到npm等命令的问题,最后手动export出环境变量来实现:
在对应的job阶段执行的脚本中添加一行:
- export PATH=/home/user/.nvm/versions/node/v16.20.1/bin/
PATH后面的是在服务器中安装的node地址