是否有办法使用hadolint多个dockerfiles?



Hadolint是一个很棒的检查Dockerfiles的工具。我在努力集成到我的CI,但我正在处理运行在多个Dockerfiles。有人知道语法是怎样的吗?下面是我的目录显示:

dir1/Dockerfile
dir2/Dockerfile
dir3/foo/Dockerfile

在gitlab-ci

stage: hadolint
image: hadolint/hadolint:latest-debian
script:
- mkdir -p reports
- |
hadolint dir1/Dockerfile > reports/dir1.json 
hadolint dir2/Dockerfile > reports/dir2.json 
hadolint dir3/foo/Dockerfile > reports/dir3.json 

但是上面的示例现在可以工作了。

就我所知,hadolint是递归运行的。在我的例子中:

- hadolint */Dockerfile > reports/all_reports.json 

但是这种方法的问题是,所有的报告将在一个文件中,这妨碍了维护和清晰度

如果您希望将所有报告分开(每个顶级目录一个),您可能希望依赖于一些shell代码片段?

我的意思是:

- |
find . -name Dockerfile -exec 
sh -c 'src=${1#./} && { set -x && hadolint "$1"; } | tee -a "reports/${src%%/*}.txt"' sh "{}" ;

解释:

  • find . -name Dockerfile遍历当前目录下的所有dockerfile;
  • -exec sh -c '…'为每个Dockerfile运行子shell,设置如下:
    • $0 = "sh"(虚拟值)
    • $1 = "{}"(Dockerfile的完整相对路径),"{}";find … -exec模式直接相关;
  • src=${1#./}修剪路径,用dir1/Dockerfile代替./dir1/Dockerfile
  • ${src%%/*}提取顶级目录名称(dir1/Dockerfiledir1)
  • | tee -a …复制输出,将hadolint的输出附加到每个解析的Dockerfile的顶层目录报告文件中(而> …在这里应该避免,因为明显的原因,如果你在一个顶层目录中有几个Dockerfile)。
  • 我已经用.txt代替了.json扩展,因为hadolint似乎不输出JSON数据。

相关内容

  • 没有找到相关文章