前言
正文
gitlab-runner
安装
环境:阿里云服务器,Ubuntu
执行脚本
# For Debian/Ubuntu/Mintcurl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash# For RHEL/CentOS/Fedoracurl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
安装
# For Debian/Ubuntu/Mintsudo apt-get install gitlab-runner# For RHEL/CentOS/Fedorasudo yum install gitlab-runner
安装nvm(因为没有使用docker,所以需要nvm控制node版本)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
重启shell,测试nvm
command -v nvm
nvm 速度问题,更换镜像
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构建。
执行器
选择 shell,这里看公司支持了,下次迭代试试docker
nvm安装
由于使用的gitlab-runner不是docker模式,是shell,需要自己整个nvm来控制node版本
注意安装时要配置环境变量etc/enviroment,如$NVMDIR路径
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash# 建议指定安装目录curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash | NVM_DIR="/example/nvm"
# cli中使用source $NVM_DIR/nvm.sh; #nvm初始化# 我是带上了source这个才能用,对linux还是不熟悉,没有深究为何nvm use ${nodeVersion};node -v;npm -v;
#yml的配置variables:NODE_VERSION_DEFAULT: 10 #默认node版本before_script:- NODE_VERSION=${NODE_VERSION:=$NODE_VERSION_DEFAULT}- source ${NVM_DIR}/nvm.sh #nvm初始化,nvm是一个脚本不是指令- nvm use ${NODE_VERSION}- node -v
gitlab-ci.yml
配置
default:before_script:- whoami- echo "当前项目为 【$CI_PROJECT_NAME】"- pwd- node -v- export NODE_MODULES_VERSION=`sha1sum package.json`cache:key: '$NODE_MODULES_VERSION'paths:- node_modules/stages:- npm-install- build# 安装依赖npm-install:stage: npm-installinterruptible: truerules:- if: '$CI_COMMIT_BRANCH =~ /^[alpha|beta|master]+$/'- changes:- package.jsoncache:key: '$NODE_MODULES_VERSION'paths:- node_modules/script:- echo 'npm-install 开始'- echo "node_modules版本=$NODE_MODULES_VERSION"# 判断node_modules文件夹是否存在- |if [ -d "./node_modules/" ]; thenecho -e "\e[42m 缓存存在,跳过npm i \e[0m"elseecho -e "\e[43m node_modules不存在, 执行npm i \e[0m"npm ifi- echo "npm-install 结束"# only:# variables:# - $CI_COMMIT_TAG == 'npm-install'# - $CI_COMMIT_MESSAGE =~ /npm-install/build:stage: buildinterruptible: truerules:- if: '$CI_COMMIT_BRANCH =~ /^[alpha|beta|master]+$/'cache:key: '$NODE_MODULES_VERSION'# 下面的配置指示,我们当前只拉取缓存,不上传,这样会节省不少时间policy: pull# 指定要缓存的文件/文件夹paths:- node_modules/script:- echo 'npm run build 开始'- npm run dist- echo 'npm run build 结束'artifacts:paths:- ./distexpire_in: 3 days # 构建产物过期,无法下载
