有没有办法将hadolint用于多个DockerFile?
这是一个非常棒的工具,用于制作码头文件。我正在努力 集成到我的CI,但我正在处理多个DockerFile的运行。有人知道语法是什么样的吗?以下是我的目录的显示方式:有没有办法将hadolint用于多个DockerFile?,docker,shell,gitlab,Docker,Shell,Gitlab,这是一个非常棒的工具,用于制作码头文件。我正在努力 集成到我的CI,但我正在处理多个DockerFile的运行。有人知道语法是什么样的吗?以下是我的目录的显示方式: dir1/Dockerfile dir2/Dockerfile dir3/foo/Dockerfile 在gitlab ci中 stage: hadolint image: hadolint/hadolint:latest-debian script: - mkdir -p reports - | had
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代码段 我的意思是:
-|
找到-名称Dockerfile-exec\
sh-c'src=${1}./}&{set-x&&hadolint“$1”;}tee-a“reports/${src%%/*}.txt”'sh{};
说明:
循环当前目录中的所有Dockerfile李>find-name Dockerfile
为每个Dockerfile运行子shell,设置:-exec sh-c'…'
(虚拟值)$0=“sh”
(Dockerfile的完整相对路径)、$1=“{}”
和“{}”
\代码>与
模式直接相关李>find…-exec
修剪路径,将src=${1#./}
替换为/dir1/Dockerfile
dir1/Dockerfile
提取顶级目录名(${src%%/*}
→ <代码>目录1)dir1/Dockerfile
- 和
复制输出,将|tee-a…
的输出附加到顶级目录报告文件中,用于每个解析的Dockerfile(而hadolint
由于明显的原因,如果在一个顶级目录中有多个Dockerfile,则此处应避免使用)…
- 我已经用
替换了.txt
扩展名,因为.json
似乎没有输出json数据hadolint
set-x
→ ..&&set-x&&hadolint“$1”..
@ErikMD有趣的是,gitlab ci bash不能作为linux shell工作。我不知道为什么。在终端上运行的命令在CIOK@full_steak_developer中不起作用,这看起来像是一个标准问题,可以通过多种方式解决;我将尝试在我的答案中提供更多细节(希望明天周五!)