Jenkins共享库流水线在从节点执行yarn命令报tsc不存在
Jenkins共享库流水线Node命令执行异常问题
问题描述
- 问题持续时长3周,多次尝试修复未解决
- 本地环境执行
yarn typecheck、prettier:check、test、ci等命令全部正常 - 通过自定义共享库编写的Jenkins流水线,在
docker-nodejs-slave从节点执行上述命令全部失败 - 执行
yarn typecheck时的报错信息如下:
+yarn typecheck yarn run v1.22.17 $ tsc --noEmit /bin/sh: tsc: command not found error Command failed with exit code 127. info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
故障流水线代码(共享库实现)
def jenkins DuploPipeline(jenkins) { this.jenkins = jenkins } jenkins.steps.node('docker-nodejs-slave') { jenkins.steps.withEnv(['NODEJS_VERSION=16','NPM_AUTH_KEY = ""','NPM_EMAIL = ""',]) { jenkins.steps.stage('Install dependencies') { jenkins.steps.sh 'yarn' } jenkins.steps.stage('Check types') { jenkins.steps.checkout jenkins.scm jenkins.steps.sh ''' export PATH=$(npm bin -g):$PATH >> ~/.profile echo $PATH which yarn ls -l /tools/nodejs/node-v16-linux-x64/bin yarn typecheck; ''' } } }
已完成排查项
- 确认PATH环境变量已包含Node.js 16安装路径,PATH输出内容如下:
/tools/nodejs/node-v16-linux-x64/bin:/tools/fortify/Fortify_SCA_and_Apps_19.2.0/bin:/tools/awscli/awscli-1/lib/aws/bin:/tools/awscli/sessionmanagerplugin/bin:/tools/nodejs/node-v16-linux-x64/bin:/tools/fortify/Fortify_SCA_and_Apps_20.1.4/bin:/tools/awscli/awscli-1/lib/aws/bin:/tools/awscli/sessionmanagerplugin/bin:/usr/local/bin:/usr/bin:/tools/awscli/aws-cli-saml:/tools/awscli/aws-cli-saml
- 检查Node.js bin目录
/tools/nodejs/node-v16-linux-x64/bin的文件列表,确认存在node、npm、yarn等可执行文件 which yarn命令返回路径为/tools/nodejs/node-v16.14.0-linux-x64/bin/yarn,全局环境配置表面无异常,但报错始终存在
对照验证结果
使用完全相同的从节点编写普通声明式流水线,所有yarn命令可正常运行,样例代码如下:
pipeline { agent none stages { stage('NodeJS Build') { agent { node { label 'docker-nodejs-slave' } } steps { script { env.NPM_AUTH_KEY = ' ' env.NPM_EMAIL = ' ' sh ''' export NODEJS_VERSION=16 source /etc/profile.d/jenkins.sh npm -v node -v yarn typecheck; ''' } } } } }
该样例流水线构建成功,执行输出如下:
+npm -v 8.3.1 +node -v v16.14.0 +yarn typecheck yarn run v1.22.17 $ tsc --noEmit Done in 17.01s. +yarn prettier:check yarn run v1.22.17 $ prettier -l 'src/**/*.{js,ts,tsx}' Done in 7.18s. [Pipeline] } [Pipeline] // script [Pipeline] } [Pipeline] // node [Pipeline] } [Pipeline] // stage [Pipeline] End of Pipeline Finished: SUCCESS
待解决问题
两次构建使用完全相同的从节点,目前无法定位基于共享库的API流水线中缺失的配置项,需协助排查问题根因。
内容的提问来源于stack exchange,提问作者Sunil N
相关产品推荐
相关产品推荐

