如何将 node.js 添加到这个启动 SonarQube 的 docker-compose 文件中?

Posted

技术标签:

【中文标题】如何将 node.js 添加到这个启动 SonarQube 的 docker-compose 文件中?【英文标题】:How to add node.js to this docker-compose file that spins up SonarQube? 【发布时间】:2020-04-11 07:46:24 【问题描述】:

我已经在我的机器上的 Docker 中安装了一个本地 SonarQube 服务器,使用基于 this recipe 的 this docker-compose.yml。它启动了 Postgres 数据库后端以及 SonarQube 本身。

当我通过 Maven 运行 Java 项目分析时,它会分析除项目的 JS 和 CSS 之外的所有内容。我收到以下警告:

CSS files were not analyzed. Error when running: 'node -v'. Is Node.js available during analysis?

Some javascript rules were not executed. Error when running: 'node -v'. Is Node.js available during analysis?

SonarQube 的 documentation 解释说:“为了分析 CSS 代码,您需要在运行扫描的机器上安装 Node.js >= 8。将属性 sonar.nodejs.executable 设置为 Node.js 可执行文件的绝对路径,如果标准节点不可用。”

我对 Docker-Compose 专家的问题是:如何将 Node.js 合并到 docker-compose 配置中?(这样我就可以从这些分析中受益,而无需安装和配置Docker 之外的主机上的 Node.js...)

【问题讨论】:

不久前有人问过这个问题:***.com/questions/58950485/… 【参考方案1】:

    在您的撰写文件的同一级别,创建一个Dockerfile

    注意 1:例如,为了简单起见,我默认使用 latest 标记进行构建,这对于生产来说是一种不好的做法。你应该选择version that suits your needs(例如lts9.2.4-developer....) 注意 2:对于 sonarqube 8 之前的版本,官方镜像是基于 ubuntu 镜像的。从版本 8 开始,基本映像已切换到 alpine。我在下面保留了前面的示例Dockerfile

    Dockerfile 用于声纳 >= 8

    FROM sonarqube
    
    USER root
    RUN apk --no-cache add nodejs
    USER sonarqube
    

    Dockerfile 用于声纳

    FROM sonarqube
    
    USER root
    RUN apt-get update \
        && apt-get install -y --no-install-recommends nodejs \
        && apt-get clean
    USER sonarqube
    

    修改您的撰写文件以构建和使用这个新图像(注意图像名称必须更改)。

      sonarqube:
        image: my_local_sonarqube
        build: .
        ports:
          - "9000:9000"
        networks:
          - sonarnet
        environment:
          - sonar.jdbc.url=jdbc:postgresql://db:5432/sonar
        volumes:
          - sonarqube_conf:/opt/sonarqube/conf
          - sonarqube_data:/opt/sonarqube/data
          - sonarqube_extensions:/opt/sonarqube/extensions
    

    启动您的应用。该图像将自动构建,因为它不存在。如果您需要稍后重建映像(例如,在更改为 Dockerfile 之后),您需要手动使用 docker-compose build 或使用 --build 选项到 docker-compose up

【讨论】:

看起来很有希望,但我仍然遇到同样的错误。在堆栈跟踪中它说“Caused by: java.io.IOException: Cannot run program "node": CreateProcess error=2, The system cannot find the file specified”。可能是 Maven(在主机上)调用“节点”而不是 SonarQube 服务器。 好吧,我的机器上需要节点。不过,您的答案对于如何将节点添加到 sonarqube 容器来说是一个很好的答案。我能够使用 docker exec [container id] node -v 测试正在运行的容器并且它工作正常。 现在,它不起作用。 sonarqube 图像不是基于 ubuntu 图像。 没错。该图像基于声纳版本 8 以来的 Alpine。您可以使用 apk 而不是 apt 轻松调整上述内容。您甚至可以提议对答案进行修改。 @Zeitounator 抱歉,我现在没有解决方案。 Here is my Dockerfile 但是在容器中找不到节点命令。

以上是关于如何将 node.js 添加到这个启动 SonarQube 的 docker-compose 文件中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将信息从 node.js 传递到 html

socket.io 手动将用户添加到房间(node.js)

将文件添加到目录时,在node.js中获取通知

Node.js:如何将打印作业添加到打印机

如何将 npm(node.js 包管理器)添加到 PATH?

如何使用 Node.js 和 Mongoose 将对象添加到嵌套数组