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 的图像会出现问题,按照设计,它们应该是精简和轻量级的,并且可能不包括依赖项。