🎏:你只管努力,剩下的交给时间
🏠 :小破站
gitlab-runner中搭建nvm、nrm以及优化maven打包
因为gitlab-runner作为服务器的一个用户,所以它是不能具备所有root权限的,对于nvm、nrm也是,除非将其安装到非~目录下
git、gitlab-runner
CentOS 7上的GitLab Runner,让你的项目加速奔跑
如何以gitlab-runner执行
sh
sudo -u gitlab-runner -i
sudo -u gitlab-runner -i 是一个 Linux 命令,它的含义可以分解如下:
• sudo:表示以超级用户(root)的权限运行接下来的命令。sudo 命令允许你以其他用户的身份运行命令。
• -u gitlab-runner:指定要以哪个用户的身份来运行命令。在这个例子中,我们指定了 gitlab-runner 用户。这样后续的命令就会以 gitlab-runner 用户的权限来执行。
• -i:表示以登录 shell 模式启动。-i 会让你切换到指定用户的 home 目录,并读取该用户的登录 shell 配置文件(如 .bash_profile 或 .profile),相当于你以该用户身份登录了一次系统。
组合的意义
sudo -u gitlab-runner -i 命令的完整含义就是:
以 gitlab-runner 用户的身份,以登录 shell 模式运行一个交互式会话(也就是进入 gitlab-runner 用户的 shell)。
执行这个命令后,你的命令提示符会切换到 gitlab-runner 用户的上下文,并且当前目录也会切换到 gitlab-runner 用户的 home 目录。此时,你就可以以 gitlab-runner 用户的权限执行接下来的命令,类似于你直接以 gitlab-runner 用户登录。
应用场景
• 检查用户权限:使用 gitlab-runner 用户身份来检查是否能访问某些文件或执行某些命令。
• 配置环境:在用户的 home 目录中配置 .bashrc 或 .bash_profile,以确保用户登录后有正确的环境变量配置。
• 调试 GitLab Runner 问题:如果 gitlab-runner 用户在 GitLab CI/CD 中无法正确执行一些命令,可以通过切换到该用户身份来手动测试命令的执行情况。
nvm、nrm
搭建nvm
sh
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.6/install.sh | bash
我用的是0.39.6版本的,目前最新的是0.40.1
加载nvm
在安装完成后,你需要加载 NVM。你可以通过以下命令来激活 NVM:
sh
source ~/.nvm/nvm.sh
或者通过添加以下内容到 ~/.bashrc 文件中,以便每次启动终端时自动加载:
bash
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
保存并退出后,可以通过以下命令来使配置生效:
sh
source ~/.bashrc
下载node
sh
# 其中14.15.1为版本号
nvm install 14.15.1
下载nrm
sh
npm install -g nrm
下载成功截图
上面虽然是在系统中搭建的,但是在gitlab-runner中搭建方式也是一样的
注意:在编写gitlab-ci.yml的时候要执行 source ~/.bashrc
yaml
build:
stage: build
# image: node:16 # 使用 Node.js 14 镜像作为构建环境
script:
- source ~/.bashrc # 自动加载配置文件
- npm install # 安装项目依赖
- npm run build # 执行构建命令,生成静态文件
- tar -czf public.tar.gz -C public . # 将 public 目录下的内容打包为 public.tar.gz
artifacts:
paths:
- public.tar.gz # 将打包后的文件作为 artifacts,以供后续阶段使用
tags:
# - saas-linux-small-amd64
- acowbo-node
优化maven
优化前大概发一次版本需要三分钟,优化后仅需要不到40s
这里给大家提供一个思路
- 优化拉依赖(如果你没有本地仓库的话,就会每次都要拉取线上的依赖,非常费时间)优化打包(如果你的项目很大,这时候就要想优化打包了,因为对于不同服务器的文件传输,也是很费时间的)