如何将 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
latest
标记进行构建,这对于生产来说是一种不好的做法。你应该选择version that suits your needs(例如lts
、9.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 文件中?的主要内容,如果未能解决你的问题,请参考以下文章