カスタムノードRed Dockerイメージとパフォーマンス統合テストとCI/CDパイプラインを作成する
9134 ワード
事前の要件
このポストは読者が理解していると仮定するNode-Red フロー
プログラミングツールとそのカスタムDockerイメージを使用して動作するようにしたい.
このポストは、読者がPythonプログラミングに精通していると仮定します.
要件
Node Redは、フローを通じて多くのコンポーネントを接続する視覚的な方法を提供します.
我々は自分の個人的なスタックのためにそれを使用することに興味があります.
試してみないとNode-Red Documentation for Docker 提供する
はじめに
フローはWebブラウザにレンダリングされるので、考慮する必要があります
カスタムノード赤コンテナーを他のコンテナと統合する場合のテスト
スタック展開の中で.
このガイドでは、カスタムを作成するの間のドットに参加する簡潔な方法を提供します
ノードの赤いコンテナーと、
docker-compose
ファイル使用the
pytest-docker-compose
suite .沿って続く
を参照してくださいGitHub Repository for
コード構造とファイル内容
カスタムノードレッド
ダイビングは深い端にまっすぐに、我々はノードの赤のカスタムコンテナを作成する
次のとおり
node-red
ランタイムエンジンnode-red
ダッシュボードNOTE: for this post sake, we stick to basic things, please feel free to add more things
according to you needs.
ノード赤とその依存関係の追加
ノードRedを使用した標準的な実践では、ユーザーは
npm install
コマンドライン.しかし、内部Node-Red-Docker Repo Wiki , また、これらのフロー/依存関係を
package.json
.この方法に固執して、コンテナの中でCLIを通してものを加えるのを避けましょう.
クリエイトア
package.json
ファイルを追加し、次のように追加します.{
"name": "node-red-slim-container",
"description": "A Slim Node-RED Docker Image running on Alpine Container",
"dependencies": {
"node-red": ">=2.2.0",
"node-red-dashboard": "*"
},
"scripts": {
"start": "node $NODE_OPTIONS node_modules/node-red/red.js $FLOWS --userDir=/data"
}
}
AをつくることDockerfile
スリムイメージのための多段DockerFile
私たちはMulti-Stage Docker build process 我々のイメージを少しの光に保つために
使用サイズ
alpine
ベースコンテナと公式minimal
ノード赤からのイメージ.ビルドプロセスで2つのステージを使用します.
alpine
nodered/node-red-minimal
流れ/depsをインストールして、準備するイメージnode_modules
node_modules
ディレクトリこの制作イメージに.
我々
Dockerfile
以下のようになります.FROM alpine:3.13 AS base
RUN apk add --no-cache \
nodejs \
npm && \
mkdir -p /usr/src/node-red /data && \
adduser -h /usr/src/node-red -D -H node-red -u 1000 && \
chown -R node-red:node-red /data
FROM nodered/node-red:2.2.2-minimal AS build
COPY package.json .
RUN npm install \
--unsafe-perm --no-update-notifier \
--no-audit --only=production
FROM base as prod
COPY --from=build --chown=node-red:node-red /data/ /data/
WORKDIR /usr/src/node-red
COPY settings.js /data/settings.js
COPY flows.json /data/flows.json
COPY --from=build --chown=node-red:node-red /usr/src/node-red/ /usr/src/node-red/
USER node-red
CMD ["npm", "start"]
私たちはベースイメージから始めますalpine:3.13
を追加して準備するnodejs
and npm
ノードレッドを実行する必要があります.セキュリティベストプラクティスのためにnode-red
ユーザとグループASすべてを実行することに反対する
root
. これはコンテナ内の特権のエスカレーションを回避します.だけでなく、容器内の誤用.
我々
build
ステージはすべてのNPMパッケージをインストールしますpackage.json
そして、我々は必要
node_modules
我々にprod
イメージ.最後に、コマンドをnpm start
ローカルでこのイメージをビルドできます:docker build -t node-red-slim:latest .
ノード赤でHealthCheck APIを加えてください
これを参照できますDiscussion Thread on Node-Red Forum フローを作成するには、次の手順を使用します
flows.json
ファイルフローが再び動作しているかどうかを確認できます.
curl -XGET http://localhost:1880/health
Dockerイメージを実行するときにポート1880を設定するのを忘れないでください. docker run -p 1880:1880 node-red-slim:latest
それがうまくいけば、良い仕事!今ではPythonとの統合テストを行う時間ですノード赤画像の統合テスト
あなたが試すことができる1つのクールなものはpytest-docker-compose どれが良いスイートを提供します
テストする
docker-compose
. 私はあまり深くそれに潜んでいない健康チェックを行う単純なテストを行うには
/health
一旦コンテナが稼働しているなら、API.ファイルのテスト
pytest-docker-compose
プラグインですpytest
テストスイート.テストディレクトリの構造次のようにしてください.
.
├── README.md
├── requirements.dev.txt
├── scripts
│ ├── 00-build-test-env.sh
│ └── 01-run-tests.sh
├── test-docker-compose.yml
└── tests
├── conftest.py
└── test_fixtures.py
参照tests/integration ファイル名ディレクトリThe
conftest.py
のための固定具として使用されますtest-docker-compose.yml
テストスタックに使用します.the
test_fixture.py
pingにテストフィクスチャを含んでいます/health
我々の流れからのAPIノード赤コンテナ
この場合、
/health
APIはHTTP 200のOK応答を提供し、テストはパスします.もっと追加できますテストあなたの要件に応じて.
我々は、シンプルなbashスクリプトを活用する
scripts
セットアップのディレクトリ仮想環境
test-docker-compose
をアップロードして実行する追加:このセットアップを使用してCI / CDパイプラインgithubを使用して
あなたは、私たちがちょうどCI/CDパイプラインとして経験した我々のステップを考えることができます.手順は次のとおりです.
pytest-docker-compose
私がタグを押すとき.
v1.2.0
などこのワークフローのために、あなたのgithub秘密であなたのレジストリの資格情報を設定する必要があります.
YAMLファイルのサンプルについてはdeploy.yml
推論
それはどのようにカスタムノードレッド、Docker、Dockerの作成と統合テストを行うです!
私はNode Redで生成される流れの個々のテストのテストを行うことに気づいていません
テストはいくつかの可能なスタックでノードレッドを統合することに焦点を当てます
スタック.
コメント、批判、フィードバックがあれば、私に手を差し伸べてください.
Reference
この問題について(カスタムノードRed Dockerイメージとパフォーマンス統合テストとCI/CDパイプラインを作成する), 我々は、より多くの情報をここで見つけました https://dev.to/shandesai/create-a-custom-node-red-docker-image-and-performance-integration-tests-and-cicd-pipelines-56b5テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol