Docker 容器中的 TypeScript SonarQube 扫描
TypeScript SonarQube Scan in Docker Container
我正在尝试通过 Jenkins 管道构建我的 TypeScript 应用程序。为了管理构建、测试和代码质量扫描,我让 Jenkins 使用基于 node:7-alpine.
的 Docker 代理
我容器的Docker文件是:
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'
}
}
在声纳 运行 之前一切似乎都正常。当它 运行s 我得到错误:
[-47-get-web-client-building-LUNCQQ5SQOUXXUXPT5TJDVBCFON3OPD2COBIW6WPU3J3ZRFFTYJQ] Running shell script
- gulp sonar
[03:00:14] Using gulpfile
/var/jenkins_home/workspace/-47-get-web-client-building-LUNCQQ5SQOUXXUXPT5TJDVBCFON3OPD2COBIW6WPU3J3ZRFFTYJQ/gulpfile.js
[03:00:14] Starting 'sonar'...
[03:00:14] Starting SonarQube analysis...
[03:00:14] Checking if executable exists:
/home/node/.sonar/native-sonar-scanner/sonar-scanner-3.0.3.778-linux/bin/sonar-scanner
[03:00:14] Could not find executable in
'/home/node/.sonar/native-sonar-scanner'.
[03:00:14] Proceed with download of the platform binaries for
SonarQube Scanner...
[03:00:14] Creating /home/node/.sonar/native-sonar-scanner
[03:00:14] Downloading from
https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip
[03:00:14] (executable will be saved in cache folder:
/home/node/.sonar/native-sonar-scanner)
/home/node/.sonar/native-sonar-scanner/sonar-scanner-3.0.3.778-linux/bin/sonar-scanner:
exec: line 73:
/home/node/.sonar/native-sonar-scanner/sonar-scanner-3.0.3.778-linux/jre/bin/java:
not found
child_process.js:504
throw err;
^
我只使用了 node:7-alpine 容器,我得到了同样的错误。奇怪的是容器有 java 可执行文件,但似乎无法识别:
我有同样的错误。
我不知道这个错误的原因,但解决方法是使用节点的非高山版本。
也许你可以使用 multistage docker build 这样你的最终图像无论如何都是基于高山版本的。
我对此进行了更多调查,我认为问题在于假设存在一些实际上并不存在的动态依赖项。
不幸的是,我已经转移到另一个项目并且无法重现该问题,但我怀疑如果使用 ldd,您会发现存在导致错误的未满足的动态依赖项。这也解释了为什么基于 alpine 的图像会出现问题,按照设计,它们应该是精简和轻量级的,并且可能不包括依赖项。
我正在尝试通过 Jenkins 管道构建我的 TypeScript 应用程序。为了管理构建、测试和代码质量扫描,我让 Jenkins 使用基于 node:7-alpine.
的 Docker 代理我容器的Docker文件是:
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'
}
}
在声纳 运行 之前一切似乎都正常。当它 运行s 我得到错误:
[-47-get-web-client-building-LUNCQQ5SQOUXXUXPT5TJDVBCFON3OPD2COBIW6WPU3J3ZRFFTYJQ] Running shell script
- gulp sonar
[03:00:14] Using gulpfile /var/jenkins_home/workspace/-47-get-web-client-building-LUNCQQ5SQOUXXUXPT5TJDVBCFON3OPD2COBIW6WPU3J3ZRFFTYJQ/gulpfile.js
[03:00:14] Starting 'sonar'...
[03:00:14] Starting SonarQube analysis...
[03:00:14] Checking if executable exists: /home/node/.sonar/native-sonar-scanner/sonar-scanner-3.0.3.778-linux/bin/sonar-scanner
[03:00:14] Could not find executable in '/home/node/.sonar/native-sonar-scanner'.
[03:00:14] Proceed with download of the platform binaries for SonarQube Scanner...
[03:00:14] Creating /home/node/.sonar/native-sonar-scanner
[03:00:14] Downloading from https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip
[03:00:14] (executable will be saved in cache folder: /home/node/.sonar/native-sonar-scanner)
/home/node/.sonar/native-sonar-scanner/sonar-scanner-3.0.3.778-linux/bin/sonar-scanner: exec: line 73: /home/node/.sonar/native-sonar-scanner/sonar-scanner-3.0.3.778-linux/jre/bin/java: not found
child_process.js:504
throw err; ^
我只使用了 node:7-alpine 容器,我得到了同样的错误。奇怪的是容器有 java 可执行文件,但似乎无法识别:
我有同样的错误。 我不知道这个错误的原因,但解决方法是使用节点的非高山版本。 也许你可以使用 multistage docker build 这样你的最终图像无论如何都是基于高山版本的。
我对此进行了更多调查,我认为问题在于假设存在一些实际上并不存在的动态依赖项。 不幸的是,我已经转移到另一个项目并且无法重现该问题,但我怀疑如果使用 ldd,您会发现存在导致错误的未满足的动态依赖项。这也解释了为什么基于 alpine 的图像会出现问题,按照设计,它们应该是精简和轻量级的,并且可能不包括依赖项。