すべて、
Jenkinsセットアップで自動テストを実行して、ソルト状態ファイル(.sls
)で「smoke」および「lint」タイプのテストを実行しようとしています。これまでのすべてのgoogle-fooはほとんど情報を生み出していません。コマンドラインでtest=True
を介してテストする方法がありますが、それはシェルなしのアカウントでは機能しません(Jenkinのアカウントは通常そうです)。
この種の自動 SaltStack状態のテストを行っている人にはまだ出くわしていません。そう:
1)それは可能ですか
2)私が見ることができる良いリソースを誰もが知っています
TIA。
Docker。サーバー構成の迅速な自動テストは、Dockerが釘付けにする否定できない現実の問題です。すでに起動され、ネットワーク上でリッスンしているクリーンなコンピューターを1秒で提供できます。/srv/saltバインドマウントでイメージを開始すると、salt-call --local state.highstate -l debug
を実行して、salt-key
に煩わされることなく状態をテストできます。
SaltStack、IncがLXCをほぼ同じように使用したことを私は知っています。彼らはおそらくまだそうします。
テストに関しては、状態ファイルに注意を払っていれば、クリーンな2回目の実行が成功の兆候であると見なすことができます。
一部の状態は常に再実行されるため、これを実現するのは困難です。 Salt Stackは、これらの状態が見つかったときにそれらを修正するのに優れています。それまでの間、これらの状態を、実行時にミニオンでコマンドを実行するインラインjinja条件で囲む必要があります。
{% if salt['cmd.retcode']('your test here') %}
some-identifier:
some.module:
- name: some anme
{% endif %}'
jenkins-dockerプラグイン が存在します:
Dockerプラグインの目的は、docker Hostを使用してスレーブを動的にプロビジョニングし、単一のビルドを実行してから、そのスレーブを破棄できるようにすることです。
または、 新しいdocker-ng saltモジュール を介してすべてを自動化することもできます。
salt dockhost docker-ng.create states-qa rm=True binds="/srv/salt:/srv/salt"
salt dockhost docker-ng.retcode states-qa 'salt-call --local state.highstate' # run 1
salt dockhost docker-ng.retcode states-qa 'salt-call --local state.highstate' # run 2
salt dockhost docker-ng.stop states-qa
私は塩の状態でこのQAを達成するための良い方法をしばらく探していましたが、これまでの私の最善の答えは次のとおりです。
Jenkinsを使用して、次のようなdev gitブランチに基づいて(sshを介して)ジョブを起動します。
ラボのproxmoxプライベートクラウドにlxcをプロビジョニングします(prodでこれを行うのとまったく同じ方法で)
塩原子炉を使用して、コンテナはその構成を取得します(製品の場合と同様)
Testinfraを使用して、構築および構成されたコンテナーで単体テストを実行する
最後に、すべてがうまくいった場合はコンテナを破壊し、そうでない場合は朝のデバッグセッションのためにコンテナを存続させます:)
また、リンティングジェンキンスジョブを次のように実行します。
for state in $(Sudo /usr/bin/salt-call cp.list_states | awk '{print $2}' | grep -v "^top$"); do Sudo /usr/bin/salt-call --retcode-passthrough state.show_sls ${state} ; done
この最後のリンティングジョブの正しいリターンコードを取得するのにまだ問題があります(sshなどが原因)。
このプロセスは全体として:を保証します
Testinfraの本当の良い点は、sshキーやその他のものをデプロイする必要なしにtestinfraがコンテナに接続できるようにするsalt接続バックエンドを使用できることです(初期プロビジョニングにsalt-cloudを使用しているため)
Testinfraの詳細 塩接続バックエンド 、testinfra 塩モジュール 。
これは完璧ではありませんが、それでもかなり良い仕事をします。
あなたは見てみたいかもしれません TestInfra