Docker 容器中的 TypeScript SonarQube 扫描
Posted
技术标签:
【中文标题】Docker 容器中的 TypeScript SonarQube 扫描【英文标题】:TypeScript SonarQube Scan in Docker Container 【发布时间】:2018-10-09 09:25:25 【问题描述】:我正在尝试通过 Jenkins 管道构建我的 TypeScript 应用程序。为了管理构建、测试和代码质量扫描,我让 Jenkins 使用基于 node:7-alpine 的 Docker 代理。
我的容器的 Dockerfile 是:
FROM node:7-alpine
RUN npm install -g gulp sonarqube-scanner
我的 Jenkins 文件如下所示:
pipeline
agent
dockerfile dir 'build-image'
stages
stage('Build')
steps
sh 'npm install'
sh 'npm run build'
stage("SonarQube Analysis")
steps
sh 'gulp sonar'
在声纳运行之前一切似乎都正常。当它运行时出现错误:
[-47-get-web-client-building-LUNCQQ5SQOUXXUXPT5TJDVBCFON3OPD2COBIW6WPU3J3ZRFFTYJQ] 运行shell脚本
gulp 声纳[03:00:14] 使用 gulpfile /var/jenkins_home/workspace/-47-get-web-client-building-LUNCQQ5SQOUXXUXPT5TJDVBCFON3OPD2COBIW6WPU3J3ZRFFTYJQ/gulpfile.js
[03:00:14] 开始“声纳”...
[03:00:14] 开始 SonarQube 分析...
[03:00:14] 检查可执行文件是否存在: /home/node/.sonar/native-sonar-scanner/sonar-scanner-3.0.3.778-linux/bin/sonar-scanner
[03:00:14] 找不到可执行文件 '/home/node/.sonar/native-sonar-scanner'.
[03:00:14] 继续下载平台二进制文件 SonarQube 扫描仪...
[03:00:14] 创建 /home/node/.sonar/native-sonar-scanner
[03:00:14] 下载自 https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip
[03:00:14](可执行文件将保存在缓存文件夹中: /home/node/.sonar/native-sonar-scanner)
/home/node/.sonar/native-sonar-scanner/sonar-scanner-3.0.3.778-linux/bin/sonar-scanner: 执行:第 73 行: /home/node/.sonar/native-sonar-scanner/sonar-scanner-3.0.3.778-linux/jre/bin/java: 没找到
child_process.js:504
throw err; ^
我只使用了 node:7-alpine 容器,我得到了同样的错误。奇怪的是容器有 java 可执行文件,但似乎无法识别:
【问题讨论】:
【参考方案1】:我对此进行了更多研究,我认为问题在于假设存在一些实际上不存在的动态依赖项。 不幸的是,我已经转移到另一个项目并且无法重新创建问题,但我怀疑如果使用ldd,您会发现存在不满足的动态依赖关系导致错误。这也解释了为什么基于 alpine 的图像会出现问题,根据设计,它们应该是精简和轻量级的,并且可能不包含依赖项。
【讨论】:
【参考方案2】:我有同样的错误。 我不知道这个错误的原因,但解决方法是使用非高山版本的节点。 也许您可以使用multistage docker build,这样您的最终图像无论如何都是基于 alpine 版本的。
【讨论】:
以上是关于Docker 容器中的 TypeScript SonarQube 扫描的主要内容,如果未能解决你的问题,请参考以下文章
Docker容器:将带UI的程序直接转为Web应用,so easy
Docker容器:将带UI的程序直接转为Web应用,so easy
使用 VS Code 调试在 Docker 容器中使用 ts-node 运行的 TypeScript 应用程序时,如何能够正确设置断点?
ImportError:libgthread-2.0.so.0:无法打开共享对象文件:使用 Docker 容器导入 cv2 时没有此类文件或目录