カスタムノードRed Dockerイメージとパフォーマンス統合テストとCI/CDパイプラインを作成する


事前の要件


このポストは読者が理解していると仮定する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
  • 次に、ステップ1でベースイメージを生成画像として使用し、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パイプラインとして経験した我々のステップを考えることができます.手順は次のとおりです.
  • カスタムノードレッドDockerイメージ
  • テスト統合pytest-docker-compose
  • テストが通過するならば、イメージをDockerハブに押してください
  • リポジトリには、Dockerイメージを押すだけのGithubワークフローを設定します
    私がタグを押すとき.v1.2.0 など
    このワークフローのために、あなたのgithub秘密であなたのレジストリの資格情報を設定する必要があります.
    YAMLファイルのサンプルについてはdeploy.yml

    推論


    それはどのようにカスタムノードレッド、Docker、Dockerの作成と統合テストを行うです!
    私はNode Redで生成される流れの個々のテストのテストを行うことに気づいていません
    テストはいくつかの可能なスタックでノードレッドを統合することに焦点を当てます
    スタック.
    コメント、批判、フィードバックがあれば、私に手を差し伸べてください.