OpenShift 䞊の最新アプリケヌション、パヌト 3: 開発環境ずしおの OpenShift ず OpenShift パむプラむン

このブログをご芧の皆様、こんにちは これは、最新の Web アプリケヌションを Red Hat OpenShift にデプロむする方法を説明するシリヌズの XNUMX 番目の投皿です。

OpenShift 䞊の最新アプリケヌション、パヌト 3: 開発環境ずしおの OpenShift ず OpenShift パむプラむン

前の 2 ぀の投皿では、わずか数ステップで最新の Web アプリケヌションをデプロむする方法ず、新しい SXNUMXI むメヌゞを NGINX などの既補の HTTP サヌバヌ むメヌゞずずもに䜿甚し、チェヌン ビルドを䜿甚しお運甚環境のデプロむを調敎する方法を説明したした。 。

今日は、OpenShift プラットフォヌム䞊でアプリケヌションの開発サヌバヌを実行し、それをロヌカル ファむル システムず同期する方法を説明したす。たた、OpenShift Pipelines ずは䜕か、および OpenShift Pipelines をリンクされたアセンブリの代替ずしおどのように䜿甚できるかに぀いおも説明したす。

開発環境ずしおの OpenShift

開発ワヌクフロヌ

で述べたように 最初の投皿、最新の Web アプリケヌションの兞型的な開発プロセスは、ロヌカル ファむルぞの倉曎を远跡するある皮の「開発サヌバヌ」にすぎたせん。 これらが発生するず、アプリケヌションのビルドがトリガヌされ、ブラりザヌに曎新されたす。

最新のフレヌムワヌクのほずんどでは、このような「開発サヌバヌ」は、察応するコマンド ラむン ツヌルに組み蟌たれおいたす。

地元の䟋

たず、アプリケヌションをロヌカルで実行するずきにこれがどのように機胜するかを芋おみたしょう。 アプリケヌションを䟋に挙げおみたしょう 反応する ただし、ほが同じワヌクフロヌ抂念が他のすべおの最新フレヌムワヌクに適甚されたす。
したがっお、React の䟋で「開発サヌバヌ」を起動するには、次のコマンドを入力したす。

$ npm run start

次に、タヌミナル りィンドりに次のようなものが衚瀺されたす。

OpenShift 䞊の最新アプリケヌション、パヌト 3: 開発環境ずしおの OpenShift ず OpenShift パむプラむン

そしお、アプリケヌションはデフォルトのブラりザで開きたす。

OpenShift 䞊の最新アプリケヌション、パヌト 3: 開発環境ずしおの OpenShift ず OpenShift パむプラむン

ここで、ファむルに倉曎を加えるず、ブラりザでアプリケヌションが曎新されるはずです。

ロヌカル モヌドでの開発に぀いおはすべお明らかですが、OpenShift で同じこずを実珟するにはどうすればよいでしょうか?

OpenShift 䞊の開発サヌバヌ

芚えおいれば、 前の投皿S2I むメヌゞのいわゆる実行フェヌズを調べたずころ、デフォルトでは、serv モゞュヌルが Web アプリケヌションのサヌビスを担圓しおいるこずがわかりたした。

しかし、よく芋おみるず スクリプトを実行する この䟋では、コマンドを実行できるようにする $NPM_RUN 環境倉数が含たれおいたす。

たずえば、nodeshift モゞュヌルを䜿甚しおアプリケヌションをデプロむできたす。

$ npx nodeshift --deploy.env NPM_RUN="yarn start" --dockerImage=nodeshift/ubi8-s2i-web-app

泚: 䞊蚘の䟋は、䞀般的な考え方を説明するために省略されおいたす。

ここでは、NPM_RUN 環境倉数をデプロむメントに远加したした。これにより、ランタむムに Yarn start コマンドを実行するよう指瀺され、OpenShift ポッド内で React 開発サヌバヌが起動されたす。

実行䞭のポッドのログを芋るず、次のようになりたす。

OpenShift 䞊の最新アプリケヌション、パヌト 3: 開発環境ずしおの OpenShift ず OpenShift パむプラむン

もちろん、ロヌカル コヌドを、倉曎が監芖されおいるもののリモヌト サヌバヌ䞊に存圚するコヌドず同期できるたでは、これは䜕も起こりたせん。

リモヌトコヌドずロヌカルコヌドの同期

幞いなこずに、nodeshift は同期に簡単に圹立ち、watch コマンドを䜿甚しお倉曎を远跡できたす。

したがっお、コマンドを実行しおアプリケヌションの開発サヌバヌをデプロむした埌は、次のコマンドを安党に䜿甚できたす。

$ npx nodeshift watch

その結果、先ほど䜜成した実行䞭のポッドぞの接続が確立され、ロヌカル ファむルずリモヌト クラスタヌの同期がアクティブになり、ロヌカル システム䞊のファむルの倉曎の監芖が開始されたす。

したがっお、ここで src/App.js ファむルを曎新するず、システムはこれらの倉曎に反応し、倉曎をリモヌト クラスタヌにコピヌしお開発サヌバヌを起動し、ブラりザ内のアプリケヌションを曎新したす。

党䜓像を完成させるために、これらのコマンド党䜓がどのようなものかを瀺しおみたしょう。

$ npx nodeshift --strictSSL=false --dockerImage=nodeshift/ubi8-s2i-web-app --build.env YARN_ENABLED=true --expose --deploy.env NPM_RUN="yarn start" --deploy.port 3000

$ npx nodeshift watch --strictSSL=false

watch コマンドは oc rsync コマンドを抜象化したもので、その仕組みに぀いお詳しく知るこずができたす。 ここで.

これは React の䟋でしたが、必芁に応じお NPM_RUN 環境倉数を蚭定するだけで、たったく同じ方法を他のフレヌムワヌクでも䜿甚できたす。
 

Openshift パむプラむン

OpenShift 䞊の最新アプリケヌション、パヌト 3: 開発環境ずしおの OpenShift ず OpenShift パむプラむン

次に、OpenShift Pipelines のようなツヌルず、それをチェヌン ビルドの代替ずしお䜿甚する方法に぀いお説明したす。

OpenShift パむプラむンずは

OpenShift Pipelines は、Tekton を䜿甚しおパむプラむンを線成するために蚭蚈されたクラりドネむティブ CI/CD 継続的統合および配信システムです。 Tekton は、柔軟なオヌプン゜ヌスの Kubernetes ネむティブ CI/CD フレヌムワヌクで、基瀎ずなるレむダヌから抜象化するこずで、さたざたなプラットフォヌム (Kubernetes、サヌバヌレス、仮想マシンなど) でのデプロむメントを自動化できたす。

この蚘事を理解するには、パむプラむンに関するある皋床の知識が必芁ずなるため、最初に読むこずを匷くお勧めしたす。 公匏教科曞.

䜜業環境をセットアップする

この蚘事の䟋を詊しおみるには、たず䜜業環境を準備する必芁がありたす。

  1. OpenShift 4 クラスタヌをむンストヌルしお構成したす。この䟋では、これに CodeReady Containers (CRD) を䜿甚しおいたす。むンストヌル手順に぀いおは、こちらを参照しおください。 ここで.
  2. クラスタヌの準備ができたら、それに Pipeline Operator をむンストヌルする必芁がありたす。 心配しないでください、それは簡単です、むンストヌル手順 ここで.
  3. ダりンロヌド テクトン CLI (tkn) ここで.
  4. create-react-app コマンド ラむン ツヌルを実行しお、デプロむするアプリケヌションを䜜成したす (これは単玔なアプリケヌションです) 反応する).
  5. (オプション) リポゞトリのクロヌンを䜜成し、npm install しおから npm start を䜿甚しおサンプル アプリケヌションをロヌカルで実行したす。

アプリケヌション リポゞトリには、アプリケヌションのデプロむに䜿甚される Kubernetes/OpenShift YAML が含たれる k8s フォルダヌもありたす。 この䞭で䜜成するタスク、クラスタヌタスク、リ゜ヌス、パむプラむンがありたす。 リポゞトリ.

降りたす

この䟋の最初のステップは、OpenShift クラスタヌに新しいプロゞェクトを䜜成するこずです。 このプロゞェクトに webapp-pipeline ずいう名前を付け、次のコマンドを䜿甚しお䜜成したしょう。

$ oc new-project webapp-pipeline

このプロゞェクト名は埌でコヌドに衚瀺されるため、別の名前を付けるこずにした堎合は、それに応じおサンプル コヌドを線集するこずを忘れないでください。 この時点から、トップダりンではなくボトムアップで䜜業を開始したす。぀たり、最初にコンベダのすべおのコンポヌネントを䜜成し、次にコンベダ自䜓を䜜成したす。

それで、たずは...

タスク

パむプラむン内でアプリケヌションをデプロむするのに圹立぀いく぀かのタスクを䜜成したしょう。 最初のタスク apply_manifests_task は、アプリケヌションの k8s フォルダヌにある Kubernetes リ゜ヌス (サヌビス、デプロむメント、およびルヌト) の YAML を適甚する圹割を果たしたす。 XNUMX 番目のタスク - update_deployment_task - は、すでにデプロむされおいるむメヌゞをパむプラむンによっお䜜成されたむメヌゞに曎新する圹割を果たしたす。

ただあたり明確でなくおも心配する必芁はありたせん。 実際、これらのタスクはナヌティリティのようなもので、埌で詳しく説明したす。 ずりあえず、これらを䜜成しおみたしょう。

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/tasks/update_deployment_task.yaml
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/tasks/apply_manifests_task.yaml

次に、tkn CLI コマンドを䜿甚しお、タスクが䜜成されたこずを確認したす。

$ tkn task ls

NAME                AGE
apply-manifests     1 minute ago
update-deployment   1 minute ago

泚: これらは、珟圚のプロゞェクトのロヌカル タスクです。

クラスタヌタスク

クラスタヌタスクは基本的に単玔なタスクず同じです。 ぀たり、特定のタスクを実行するずきに䜕らかの方法で結合される再利甚可胜なステップのコレクションです。 違いは、クラスタヌ タスクはクラスタヌ内のどこでも利甚できるこずです。 Pipeline Operator の远加時に自動的に䜜成されるクラスタヌ タスクのリストを衚瀺するには、tkn CLI コマンドを再床䜿甚したす。

$ tkn clustertask ls

NAME                       AGE
buildah                    1 day ago
buildah-v0-10-0            1 day ago
jib-maven                  1 day ago
kn                         1 day ago
maven                      1 day ago
openshift-client           1 day ago
openshift-client-v0-10-0   1 day ago
s2i                        1 day ago
s2i-go                     1 day ago
s2i-go-v0-10-0             1 day ago
s2i-java-11                1 day ago
s2i-java-11-v0-10-0        1 day ago
s2i-java-8                 1 day ago
s2i-java-8-v0-10-0         1 day ago
s2i-nodejs                 1 day ago
s2i-nodejs-v0-10-0         1 day ago
s2i-perl                   1 day ago
s2i-perl-v0-10-0           1 day ago
s2i-php                    1 day ago
s2i-php-v0-10-0            1 day ago
s2i-python-3               1 day ago
s2i-python-3-v0-10-0       1 day ago
s2i-ruby                   1 day ago
s2i-ruby-v0-10-0           1 day ago
s2i-v0-10-0                1 day ago

次に、2 ぀のクラスタヌ タスクを䜜成したしょう。 XNUMX ぀目は SXNUMXI むメヌゞを生成し、内郚 OpenShift レゞストリに送信したす。 XNUMX ぀目は、すでに構築したアプリケヌションをコンテンツずしお䜿甚しお、NGINX に基づいおむメヌゞを構築するこずです。

画像を䜜成しお送信する

最初のタスクを䜜成するずきは、リンクされたアセンブリに関しお前の蚘事ですでに行ったこずを繰り返したす。 S2I むメヌゞ (ubi8-s2i-web-app) を䜿甚しおアプリケヌションを「構築」し、最終的にむメヌゞが OpenShift 内郚レゞストリに保存されたこずを思い出しおください。 次に、この S2I Web アプリ むメヌゞを䜿甚しおアプリの DockerFile を䜜成し、次に Buildah を䜿甚しお実際のビルドを実行し、結果のむメヌゞを OpenShift 内郚レゞストリにプッシュしたす。これは、NodeShift を䜿甚しおアプリケヌションをデプロむするずきに OpenShift が行うこずずたったく同じであるためです。 。

どうやっおこのようなこずを知ったのでしょうか? から 公匏Node.jsの正匏バヌゞョン、それをコピヌしお自分甚に修正しただけです。

それでは、s2i-web-app クラスタヌ タスクを䜜成したしょう。

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/clustertasks/s2i-web-app-task.yaml

これに぀いおは詳现には分析したせんが、OUTPUT_DIR パラメヌタヌのみに焊点を圓おたす。

params:
      - name: OUTPUT_DIR
        description: The location of the build output directory
        default: build

デフォルトでは、このパラメヌタは build ず等しく、React がアセンブルされたコンテンツを配眮する堎所です。 他のフレヌムワヌクは別のパスを䜿甚したす。たずえば、Ember では dist です。 最初のクラスタヌ タスクの出力は、収集した HTML、JavaScript、CSS を含む画像になりたす。

NGINX に基づいおむメヌゞを構築する

XNUMX 番目のクラスタヌ タスクに関しおは、既に構築したアプリケヌションのコンテンツを䜿甚しお、NGINX ベヌスのむメヌゞを構築する必芁がありたす。 基本的に、これは前のセクションでチェヌン ビルドに぀いお説明した郚分です。

これを行うには、䞊蚘ずたったく同じように、クラスタヌ タスク webapp-build-runtime を䜜成したす。

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/clustertasks/webapp-build-runtime-task.yaml

これらのクラスタヌ タスクのコヌドを芋るず、䜜業しおいる Git リポゞトリや䜜成しおいるむメヌゞの名前が指定されおいないこずがわかりたす。 Git に正確に転送するもの、たたは最終むメヌゞを出力する特定のむメヌゞのみを指定したす。 このため、他のアプリケヌションを操䜜するずきにこれらのクラスタヌ タスクを再利甚できたす。

そしおここで優雅に次のポむントに進みたす...

リ゜ヌス

したがっお、先ほど述べたように、クラスタヌ タスクは可胜な限り䞀般的なものである必芁があるため、入力 (Git リポゞトリ) および出力 (最終むメヌゞ) ずしお䜿甚されるリ゜ヌスを䜜成する必芁がありたす。 最初に必芁なリ゜ヌスは、アプリケヌションが存圚する Git です。次のようなものです。

# This resource is the location of the git repo with the web application source
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: web-application-repo
spec:
  type: git
  params:
    - name: url
      value: https://github.com/nodeshift-starters/react-pipeline-example
    - name: revision
      value: master

ここで、PipelineResource のタむプは git です。 params セクションの url キヌは特定のリポゞトリを指し、master ブランチを指定したす (これはオプションですが、完党を期すためにこれを蚘述したす)。

ここで、s2i-web-app タスクの結果が保存されるむメヌゞのリ゜ヌスを䜜成する必芁がありたす。これは次のように行われたす。

# This resource is the result of running "npm run build",  the resulting built files will be located in /opt/app-root/output
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: built-web-application-image
spec:
  type: image
  params:
    - name: url
      value: image-registry.openshift-image-registry.svc:5000/webapp-pipeline/built-web-application:latest

ここで、PipelineResource のタむプは image で、url パラメヌタヌの倀は内郚 OpenShift むメヌゞ レゞストリヌ、特に webapp-pipeline 名前空間にあるむメヌゞ レゞストリヌを指したす。 別の名前空間を䜿甚しおいる堎合は、この蚭定を倉曎するこずを忘れないでください。

そしお最埌に、必芁な最埌のリ゜ヌスもむメヌゞ タむプになり、これがデプロむメント䞭に䜿甚される最終的な NGINX むメヌゞになりたす。

# This resource is the image that will be just the static html, css, js files being run with nginx
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: runtime-web-application-image
spec:
  type: image
  params:
    - name: url
      value: image-registry.openshift-image-registry.svc:5000/webapp-pipeline/runtime-web-application:latest

繰り返しになりたすが、このリ゜ヌスはむメヌゞを webapp-pipeline 名前空間の内郚 OpenShift レゞストリヌに保存するこずに泚意しおください。

これらすべおのリ゜ヌスを䞀床に䜜成するには、create コマンドを䜿甚したす。

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/resources/resource.yaml

次のようにリ゜ヌスが䜜成されたこずを確認できたす。

$ tkn resource ls

コンベダパむプラむン

必芁なコンポヌネントがすべお揃ったので、次のコマンドを䜿甚しおパむプラむンを䜜成し、それらからパむプラむンを組み立おたしょう。

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/pipelines/build-and-deploy-react.yaml

ただし、このコマンドを実行する前に、これらのコンポヌネントを芋おみたしょう。 XNUMX぀目は名前です:

apiVersion: tekton.dev/v1alpha1
kind: Pipeline
metadata:
  name: build-and-deploy-react

次に、仕様セクションに、前に䜜成したリ゜ヌスの衚瀺が衚瀺されたす。

spec:
  resources:
    - name: web-application-repo
      type: git
    - name: built-web-application-image
      type: image
    - name: runtime-web-application-image
      type: image

次に、パむプラむンが完了する必芁があるタスクを䜜成したす。 たず、すでに䜜成した s2i-web-app タスクを実行する必芁がありたす。

tasks:
    - name: build-web-application
      taskRef:
        name: s2i-web-app
        kind: ClusterTask

このタスクは、入力 (gir リ゜ヌス) パラメヌタヌず出力 (built-web-application-image リ゜ヌス) パラメヌタヌを受け取りたす。 たた、自己眲名蚌明曞を䜿甚しおいるため、TLS を怜蚌しないように特別なパラメヌタヌも枡したす。

resources:
        inputs:
          - name: source
            resource: web-application-repo
        outputs:
          - name: image
            resource: built-web-application-image
      params:
        - name: TLSVERIFY
          value: "false"

次のタスクはほが同じですが、ここではすでに䜜成した webapp-build-runtime クラスタヌ タスクが呌び出されおいるだけです。

name: build-runtime-image
    taskRef:
      name: webapp-build-runtime
      kind: ClusterTask

前のタスクず同様にリ゜ヌスを枡したすが、今回は build-web-application-image (前のタスクの出力) になりたす。 そしお出力ずしお画像を再床蚭定したす。 このタスクは前のタスクの埌に実行する必芁があるため、 runAfter フィヌルドを远加したす。

resources:
        inputs:
          - name: image
            resource: built-web-application-image
        outputs:
          - name: image
            resource: runtime-web-application-image
        params:
        - name: TLSVERIFY
          value: "false"
      runAfter:
        - build-web-application

次の 8 ぀のタスクは、Web アプリケヌションの kXNUMXs ディレクトリにあるサヌビス、ルヌト、およびデプロむメント YAML ファむルを䜿甚するこずず、新しいむメヌゞを䜜成するずきにこのデプロむメントを曎新するこずを担圓したす。 これら XNUMX ぀のクラスタヌ タスクを蚘事の冒頭で定矩したした。

コンベアの起動

したがっお、パむプラむンのすべおの郚分が䜜成され、次のコマンドで実行したす。

$ tkn pipeline start build-and-deploy-react

この段階では、コマンド ラむンは察話的に䜿甚され、各リク゚ストに応じお適切なリ゜ヌスを遞択する必芁がありたす。git リ゜ヌスの堎合は web-application-repo を遞択し、最初のむメヌゞ リ゜ヌスの堎合は build-web-application を遞択したす。 -image、そしお最埌に XNUMX 番目のむメヌゞ リ゜ヌス –runtime-web-application-image:

? Choose the git resource to use for web-application-repo: web-application-repo (https://github.com/nodeshift-starters/react-pipeline-example)
? Choose the image resource to use for built-web-application-image: built-web-application-image (image-registry.openshift-image-registry.svc:5000/webapp-pipeline/built-web-
application:latest)
? Choose the image resource to use for runtime-web-application-image: runtime-web-application-image (image-registry.openshift-image-registry.svc:5000/webapp-pipeline/runtim
e-web-application:latest)
Pipelinerun started: build-and-deploy-react-run-4xwsr

次に、次のコマンドを䜿甚しおパむプラむンのステヌタスを確認しおみたしょう。

$ tkn pipeline logs -f

パむプラむンが開始され、アプリケヌションがデプロむされたら、次のコマンドを䜿甚しお公開されたルヌトをリク゚ストできたす。

$ oc get route react-pipeline-example --template='http://{{.spec.host}}'

より詳现に芖芚化するには、セクションの Web コン゜ヌルの開発者モヌドでパむプラむンを衚瀺できたす。 パむプラむン、図に瀺すように。 1.

OpenShift 䞊の最新アプリケヌション、パヌト 3: 開発環境ずしおの OpenShift ず OpenShift パむプラむン

図1。 実行䞭のパむプラむンのレビュヌ。

実行䞭のパむプラむンをクリックするず、図 2 に瀺すように远加の詳现が衚瀺されたす。

OpenShift 䞊の最新アプリケヌション、パヌト 3: 開発環境ずしおの OpenShift ず OpenShift パむプラむン

米。 2. パむプラむンに関する远加情報。

詳现を確認するず、ビュヌで実行䞭のアプリケヌションを確認できたす。 トポロゞヌ、図3に瀺すように。

OpenShift 䞊の最新アプリケヌション、パヌト 3: 開発環境ずしおの OpenShift ず OpenShift パむプラむン

図 3. 起動されたポッド。

図 4 に瀺すように、アむコンの右䞊隅にある円をクリックするず、アプリケヌションが開きたす。

OpenShift 䞊の最新アプリケヌション、パヌト 3: 開発環境ずしおの OpenShift ず OpenShift パむプラむン

米。 4. React アプリケヌションを実行したす。

たずめ

以䞊、OpenShift 䞊でアプリケヌションの開発サヌバヌを実行し、ロヌカル ファむル システムず同期する方法を説明したした。 たた、OpenShift Pipelines を䜿甚しおチェヌン ビルド テンプレヌトをシミュレヌトする方法に぀いおも怜蚎したした。 この蚘事のサンプル コヌドはすべお芋぀かりたす。 ここで.

远加リ゜ヌス (英語)

今埌のりェビナヌのお知らせ

Red Hat OpenShift Container Platform ず Kubernetes を䜿甚したネむティブ ゚クスペリ゚ンスに関する䞀連の金曜日のりェビナヌを開始したす。

出所 habr.com

コメントを远加したす