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 容器中加载 libjli.so

Docker容器:将带UI的程序直接转为Web应用,so easy

Docker容器:将带UI的程序直接转为Web应用,so easy

使用 VS Code 调试在 Docker 容器中使用 ts-node 运行的 TypeScript 应用程序时,如何能够正确设置断点?

ImportError:libgthread-2.0.so.0:无法打开共享对象文件:使用 Docker 容器导入 cv2 时没有此类文件或目录

Docker/LXC 容器是正在运行的应用程序还是内存中的东西?