BitBucket Pipelines + hadolintでDockerfileのLintを組み込む
概要
https://github.com/hadolint/hadolint/ でDockerfileをLintに通して静的解析できる
個人的にはBitbucketを使っていて、CI回せていないのでこれを機にBitBucket Pipelines(ここら辺を参考にさせて頂きました)を導入したりもしたのでメモ
hadolintの使い方
macなら brew install hadolint
で使える
自分の環境で出た内容
$ hadolint Dockerfile
Dockerfile:4 DL3018 Pin versions in apk add. Instead of `apk add <package>` use `apk add <package>=<version>`
Dockerfile:7 SC1090 Can't follow non-constant source. Use a directive to specify location.
Dockerfile:7 SC2039 In POSIX sh, 'source' in place of '.' is undefined.
Dockerfile:8 DL3013 Pin versions in pip. Instead of `pip install <package>` use `pip install <package>==<version>`
Dockerfile:10 DL3013 Pin versions in pip. Instead of `pip install <package>` use `pip install <package>==<version>`
dockerイメージで実行
docker run -v $PWD:/root --rm hadolint/hadolint:latest-debian hadolint /root/Dockerfile
でも使える。hadolintのバージョンを固定したい時はこっちでtag指定した方がいい
rule一覧
https://github.com/hadolint/hadolint/wiki
https://github.com/koalaman/shellcheck/wiki
hadolintはShellCheckというシェルスクリプトの構文Lintツールと同じ解析をする
DL3018
Alpine Linuxなどを使っているとapkというパッケージ管理ツールを使って必要なパッケージをダウンロードしたりするが、hadolintのruleではDockerfileに apk add {インストールしたいパッケージ}
書く時は <package>=<version>
とバージョンを指定した記法にすることが求められる。環境間の差異は仮想環境構築時には確かによくないので従った書き方にした。
DL3013
DL3018と同じでpythonのパッケージ管理ツールpipでインストールするライブラリのバージョンを固定しなさいというもの
SC1090
https://github.com/koalaman/shellcheck/wiki/SC1090
shellcheckのruleでは $APP_HOME/hoge
のように変数を使ってruntimeに値の決まる動的なパスを許していない。これはignoreした
hadolintのruleをオフにしたい時
# hadolint ignore=SC1090
と書くか、 .hadolint.yaml
に
ignored:
- SC1090
と書く
プロジェクトにhadolintを置いたのでBitBucket Pipelinesを始めた
BitBucket Pipelines
https://bitbucket.org/{BitBuckerのユーザーネーム}/{レポジトリ名}/addon/pipelines/home
あたりから設定を追加できます。
bitbucket-pipelines.ymlをレポジトリのトップに置くことでCIを設定できますが、BitbucketのUI上からテンプレートを指定して追加できます
bitbucket-pipelines.yml
# This is a sample build configuration for Python.
# Check our guides at https://confluence.atlassian.com/x/x4UWN for more examples.
# Only use spaces to indent your .yml configuration.
# -----
# You can specify a custom docker image from Docker Hub as your build environment.
image: hadolint/hadolint:latest-debian
pipelines:
default:
- step:
script: # Modify the commands below to build your repository.
- hadolint Dockerfile
適当なブランチにbitbucket-pipelines.ymlを置いてpushしてもPipelinesはスタートせず、web上から設定したら動き出した。なぜ…
Bitbucket Pipelinesはdockerイメージを指定して動かす。自前のdockerイメージをビルドさせて動かすこともできるらしいけどそこまでやっていない
hadolint/hadolint:latest
もあるけど hadolint/hadolint:latest-debian
でないと動かなかった
実行結果
hadolintを実行して何も問題がないと何も出力されない(なのでキャプチャは問題なし)
Author And Source
この問題について(BitBucket Pipelines + hadolintでDockerfileのLintを組み込む), 我々は、より多くの情報をここで見つけました https://qiita.com/natsuki_summer/items/881cb0b8014951225485著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .