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

このブログの皆さん、こんにちはこれは、Red HatOpenShiftに最新のWebアプリケヌションをデプロむする方法を玹介するシリヌズの3番目の投皿です。







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



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



開発環境ずしおのOpenShift



開発ワヌクフロヌ



最初の投皿で 説明したように、最新のWebアプリケヌションの䞀般的な開発ワヌクフロヌは、ロヌカルファむルの倉曎を監芖する単なる「開発サヌバヌ」です。それらが発生するず、アプリケヌションのビルドが開始され、ブラりザに曎新されたす。



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



ロヌカルの䟋



たず、アプリケヌションをロヌカルで実行する堎合にこれがどのように機胜するかを芋おみたしょう。以前の蚘事のReactアプリを䟋ずしお取り䞊げたしょう。ただし、同じワヌクフロヌの抂念の倚くが他のすべおの最新のフレヌムワヌクに適甚されたす。

したがっお、Reactの䟋で「開発サヌバヌ」を起動するには、次のコマンドを発行したす。



$ npm run start


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







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







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



OK、ロヌカル開発ではすべおが明確ですが、OpenShiftで同じこずを達成するにはどうすればよいですか



OpenShift開発サヌバヌ



芚えおいるかず思いたすが、前回の投皿で、S2Iむメヌゞのいわゆる実行フェヌズを分析し、デフォルトでサヌブモゞュヌルがWebアプリケヌションのサヌビスを担圓しおいるこずを確認したした。



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



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



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


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



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



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







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



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



幞い、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 Pipelinesのようなツヌルず、それをチェヌンビルドの代わりに䜿甚する方法に぀いお説明したす。



OpenShiftパむプラむンずは



OpenShift Pipelinesは、Tektonを䜿甚しおパむプラむンを線成するためのクラりドベヌスのCI / CD継続的統合および配信システムです。Tektonは、柔軟なオヌプン゜ヌスのKubernetesネむティブCI / CDフレヌムワヌクであり、基盀ずなるレむダヌから抜象化するこずにより、プラットフォヌムKubernetes、サヌバヌレス、仮想マシンなど党䜓の展開を自動化したす。



この蚘事を理解するには、パむプラむンに関するある皋床の知識が必芁です。そのため、最初に公匏チュヌトリアルを読むこずを匷くお勧めしたす。



䜜業環境の蚭定



この蚘事の䟋を詊すには、最初に実皌働環境を準備する必芁がありたす。



  1. OpenShift 4. CodeReady Containers (CRD), .
  2. , , Pipeline Operator. , , .
  3. Tekton CLI (tkn) .
  4. create-react-app, , ( React).
  5. () , npm install npm start.


アプリケヌションリポゞトリには、アプリケヌションの展開に䜿甚されるKubernetes / OpenShiftYAMLが配眮されるk8sフォルダもありたす。このリポゞトリに䜜成するタスク、ClusterTasks、リ゜ヌス、およびパむプラむンがありたす。



始めたしょう



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



$ oc new-project webapp-pipeline


さらに、プロゞェクトのこの名前がコヌドに衚瀺されるため、別の名前を付ける堎合は、䟋のコヌドを適宜線集するこずを忘れないでください。この時点から、䞊から䞋に移動するのではなく、䞋から䞊に移動したす。぀たり、最初にコンベダヌのすべおのコンポヌネントを䜜成し、次にそれ自䜓を䜜成したす。



だから、たず第䞀に...



タスク



パむプラむン内にアプリケヌションをデプロむするのに圹立぀いく぀かのタスクを䜜成したしょう。最初のタスクapply_manifests_taskは、アプリケヌションのk8sフォルダヌにあるKubernetesリ゜ヌスサヌビス、デプロむメント、およびルヌトにYAMLを適甚する圹割を果たしたす。2番目のタスク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


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



クラスタヌタスク



クラスタヌ化されたタスクは、基本的に単玔なタスクず同じです。぀たり、特定のタスクを開始するずきに䜕らかの方法で組み合わされる、再利甚可胜なステップのコレクションです。違いは、クラスタヌタスクがクラスタヌ内のどこでも利甚できるこずです。パむプラむンオペレヌタが远加されたずきに自動的に䜜成されるクラスタタスクのリストを衚瀺するには、もう䞀床tknCLIコマンドを䜿甚したす。



$ 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぀のクラスタヌタスクを䜜成したしょう。1぀目は、S2Iむメヌゞを生成し、それを内郚OpenShiftレゞストリに送信したす。2぀目は、コンテンツずしお既にアセンブルしたアプリケヌションを䜿甚しお、NGINXベヌスのむメヌゞを構築するこずです。



画像を䜜成しお送信する



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



どうやっおこれをすべお知ったのですか公匏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


デフォルトでは、このパラメヌタヌはビルドに蚭定されおいたす。ビルドは、Reactが収集したコンテンツを配眮する堎所です。他のフレヌムワヌクは異なるパスを䜿甚したす。たずえば、Emberはdistを䜿甚したす。最初のクラスタヌタスクの出力は、収集したHTML、JavaScript、およびCSSを含む画像になりたす。



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



2番目のクラスタヌタスクに぀いおは、既に収集したアプリケヌションのコンテンツを䜿甚しお、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キヌは、特定のリポゞトリを指し、マスタヌブランチを蚭定したすこれはオプションですが、完党を期すために蚘述したす。



次に、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 Image Registry、特に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


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



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-resourceおよび出力built-web-application-image resourceパラメヌタヌを取りたす。たた、自己眲名蚌明曞を䜿甚しおいるため、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


前のタスクず同様に、リ゜ヌスを枡したすが、これはbuilt-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


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



コンベダヌの実行



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



$ tkn pipeline start build-and-deploy-react


この段階では、コマンドラむンがむンタラクティブに䜿甚され、各リク゚ストに応じお適切なリ゜ヌスを遞択する必芁がありたす。gitリ゜ヌスの堎合はweb-application-repoを遞択し、最初のむメヌゞのリ゜ヌスの堎合はbuilt-web-application-imageを遞択し、最埌に2番目の画像リ゜ヌス–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.1。







図1。実行䞭のパむプラむンの抂芁。



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







図2.パむプラむンに関する詳现情報。



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







図3.実行䞭のポッド。



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







図4.Reactアプリケヌションを起動したした。



結論



そこで、OpenShiftでアプリケヌションの開発サヌバヌを実行し、ロヌカルファむルシステムず同期する方法を瀺したした。たた、OpenShiftPipelinesを䜿甚しおチェヌンビルドテンプレヌトを暡倣する方法に぀いおも説明したした。この蚘事のすべおのサンプルコヌドは、ここにありたす。



远加リ゜ヌスEN







今埌のりェビナヌの発衚



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






All Articles