前言

正文

gitlab-runner

安装

环境:阿里云服务器,Ubuntu

执行脚本

  1. # For Debian/Ubuntu/Mint
  2. curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
  3. # For RHEL/CentOS/Fedora
  4. curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

安装

  1. # For Debian/Ubuntu/Mint
  2. sudo apt-get install gitlab-runner
  3. # For RHEL/CentOS/Fedora
  4. sudo yum install gitlab-runner

安装nvm(因为没有使用docker,所以需要nvm控制node版本)

  1. curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

重启shell,测试nvm

  1. command -v nvm

nvm 速度问题,更换镜像

  1. NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node

注册

填写 Gitlab URL

gitlab实例地址如果要用https,需要配置证书,所以填写http和内网ip地址,这里是支持ip地址加端口的

填写 token

runner 描述信息

名称,建议写个有含义,别乱填,做提示用,用于gitlab-runner list命令,区分不同runner用,也用来gitlab-runner unregister时指定runner的名称。

填写 tag

在项目构建时,可以指定带有某个tag的runner来执行构建。
可以不填,就要注意在这个runner中配置下面选项,不然没有指定tag(指标记)的项目(指作业)无法使用此runner构建。
image.png

执行器

选择 shell,这里看公司支持了,下次迭代试试docker

nvm安装

由于使用的gitlab-runner不是docker模式,是shell,需要自己整个nvm来控制node版本
注意安装时要配置环境变量etc/enviroment,如$NVMDIR路径

  1. curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
  2. # 建议指定安装目录
  3. curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash | NVM_DIR="/example/nvm"
  1. # cli中使用
  2. source $NVM_DIR/nvm.sh; #nvm初始化
  3. # 我是带上了source这个才能用,对linux还是不熟悉,没有深究为何
  4. nvm use ${nodeVersion};
  5. node -v;
  6. npm -v;
  1. #yml的配置
  2. variables:
  3. NODE_VERSION_DEFAULT: 10 #默认node版本
  4. before_script:
  5. - NODE_VERSION=${NODE_VERSION:=$NODE_VERSION_DEFAULT}
  6. - source ${NVM_DIR}/nvm.sh #nvm初始化,nvm是一个脚本不是指令
  7. - nvm use ${NODE_VERSION}
  8. - node -v

gitlab-ci.yml

配置

  1. default:
  2. before_script:
  3. - whoami
  4. - echo "当前项目为 【$CI_PROJECT_NAME】"
  5. - pwd
  6. - node -v
  7. - export NODE_MODULES_VERSION=`sha1sum package.json`
  8. cache:
  9. key: '$NODE_MODULES_VERSION'
  10. paths:
  11. - node_modules/
  12. stages:
  13. - npm-install
  14. - build
  15. # 安装依赖
  16. npm-install:
  17. stage: npm-install
  18. interruptible: true
  19. rules:
  20. - if: '$CI_COMMIT_BRANCH =~ /^[alpha|beta|master]+$/'
  21. - changes:
  22. - package.json
  23. cache:
  24. key: '$NODE_MODULES_VERSION'
  25. paths:
  26. - node_modules/
  27. script:
  28. - echo 'npm-install 开始'
  29. - echo "node_modules版本=$NODE_MODULES_VERSION"
  30. # 判断node_modules文件夹是否存在
  31. - |
  32. if [ -d "./node_modules/" ]; then
  33. echo -e "\e[42m 缓存存在,跳过npm i \e[0m"
  34. else
  35. echo -e "\e[43m node_modules不存在, 执行npm i \e[0m"
  36. npm i
  37. fi
  38. - echo "npm-install 结束"
  39. # only:
  40. # variables:
  41. # - $CI_COMMIT_TAG == 'npm-install'
  42. # - $CI_COMMIT_MESSAGE =~ /npm-install/
  43. build:
  44. stage: build
  45. interruptible: true
  46. rules:
  47. - if: '$CI_COMMIT_BRANCH =~ /^[alpha|beta|master]+$/'
  48. cache:
  49. key: '$NODE_MODULES_VERSION'
  50. # 下面的配置指示,我们当前只拉取缓存,不上传,这样会节省不少时间
  51. policy: pull
  52. # 指定要缓存的文件/文件夹
  53. paths:
  54. - node_modules/
  55. script:
  56. - echo 'npm run build 开始'
  57. - npm run dist
  58. - echo 'npm run build 结束'
  59. artifacts:
  60. paths:
  61. - ./dist
  62. expire_in: 3 days # 构建产物过期,无法下载