如何在CircleCI中从root切换至预创建的node用户(node:9镜像)
在CircleCI中切换到node:9镜像的node用户解决方案
我太懂这种找不到配置方法的困扰了!之前我在CircleCI里切换非root用户时也卡了好久,刚好你用的circleci/node:9镜像确实自带预创建的node用户,咱们直接调整配置就能搞定。
首先,你需要修改.circleci/config.yml的两个关键地方:一是让容器直接以node用户启动,二是确保工作目录的权限没问题。下面是调整后的完整配置:
# Javascript Node CircleCI 2.0 configuration file # Check https://circleci.com/docs/2.0/language-javascript/ for more details version: 2 jobs: build: docker: # 指定镜像同时设置运行用户为node - image: circleci/node:9 user: node # 工作目录用node用户的家目录,避免权限冲突 working_directory: ~/repo steps: - checkout - restore_cache: # Download and cache dependencies keys: - v1-dependencies-{{ checksum "package.json" }} # fallback to using the latest cache if no exact match is found - v1-dependencies- # 这里不用加sudo了,当前就是node用户,有权限安装依赖 - run: npm install --loglevel=warn - save_cache: paths: - node_modules key: v1-dependencies-{{ checksum "package.json" }} # run tests! - run: echo "here are the tests"
关键改动说明:
- 在
docker镜像配置里新增user: node,这样CircleCI启动容器时直接用node用户,不用再手动切换 - 保持
working_directory在~/repo就行,因为node用户的家目录就是/home/node,~/repo对应/home/node/repo,权限完全没问题 - 去掉
npm install前的sudo,现在用node用户执行,安装的依赖也属于node用户,后续运行测试时不会出现权限报错
如果只是想在个别步骤切换用户(比如不想全局用node),也可以在对应的run命令前加sudo -u node,比如:
- run: sudo -u node npm install --loglevel=warn
不过更推荐全局切换到node用户的方式,能避免很多后续的权限坑,毕竟root用户安装的依赖,后续node用户访问时容易出问题。
内容的提问来源于stack exchange,提问作者user7898461
相关产品推荐
相关产品推荐

