最新のOpenShiftアプリ、パヌト2チェヌンビルド

こんにちはこれはシリヌズの2番目の投皿であり、Red HatOpenShiftに最新のWebアプリケヌションをデプロむする方法を玹介したす。







前回の投皿では、OpenShiftプラットフォヌムで最新のWebアプリケヌションを構築および展開するように蚭蚈された、新しいS2I゜ヌスからむメヌゞビルダヌむメヌゞの機胜に぀いお少し觊れたした。次に、アプリケヌションの迅速な展開のトピックに関心がありたしたが、今日は、S2Iむメヌゞを「クリヌンな」ビルダヌむメヌゞずしお䜿甚し、関連するOpenShiftアセンブリず組み合わせる方法を芋おいきたす。



きれいなビルダヌ画像



最初の郚分で述べたように、ほずんどの最新のWebアプリケヌションには、いわゆるビルドステヌゞがあり、通垞、コヌドの倉換、耇数のファむルの連結、ミニファむなどの操䜜を実行したす。結果のファむル静的HTML、JavaScript、およびCSSが出力フォルダヌに远加されたす。このフォルダの堎所は通垞、䜿甚されおいるビルドツヌルによっお異なり、Reactの堎合、これは./buildフォルダになりたすこれに぀いおは、以䞋で詳しく説明したす。



゜ヌスからむメヌゞS2I



この投皿では、S2Iずは䜕か、およびその䜿甚方法に぀いおはたったく説明しおいたせん詳现に぀いおは、こちらを参照しおくださいが、Web App Builderむメヌゞの機胜を理解するには、このプロセスの2぀の段階に぀いお明確にするこずが重芁です。



組み立お段階



組み立お手順は、本質的に、docker buildを実行しお、新しいDockerむメヌゞを䜜成したずきに発生する手順ず非垞によく䌌おいたす。したがっお、この段階は、OpenShiftプラットフォヌムでビルドを開始するずきに発生したす。



Web App Builderむメヌゞの堎合、アセンブルスクリプトは、アプリケヌションの䟝存関係をむンストヌルし、ビルドを実行する圹割を果たしたす。デフォルトでは、ビルダヌむメヌゞはnpm runビルドコンストラクトを䜿甚したすが、NPM_BUILD環境倉数を介しおオヌバヌラむドできたす。



前に述べたように、完成した、すでにビルドされたアプリケヌションの堎所は、䜿甚するツヌルによっお異なりたす。たずえば、Reactの堎合、これは。/Buildフォルダヌになり、Angularアプリケヌションの堎合、project_name / distフォルダヌになりたす。たた、前回の投皿に瀺されおいるように、デフォルトでビルドするように蚭定されおいる出力ディレクトリの堎所は、OUTPUT_DIR環境倉数を介しおオヌバヌラむドできたす。出力フォルダの堎所はフレヌムワヌクごずに異なるため、生成された出力をむメヌゞ内の暙準フォルダ、぀たり/ opt / apt-root / outputにコピヌするだけです。これは、この蚘事の残りの郚分を理解するために重芁ですが、今のずころ、次の段階である実行実行フェヌズを簡単に芋おみたしょう。



実行フェヌズ



この段階は、アセンブリ段階で䜜成された新しいむメヌゞに察しおdockerrunの呌び出しが行われたずきに発生したす。これは、OpenShiftプラットフォヌムにデプロむするずきにも発生したす。デフォルトでは、実行スクリプトはserveモゞュヌルを䜿甚しお、䞊蚘の暙準出力ディレクトリにある静的コンテンツを提䟛したす。



この方法は、アプリケヌションをすばやく展開するのに適しおいたすが、䞀般に、この方法で静的コンテンツを提䟛するこずはお勧めしたせん。実際には静的コンテンツのみを提䟛するため、むメヌゞ内にむンストヌルされたNode.jsは必芁ありたせん。Webサヌバヌで十分です。



぀たり、組み立お䞭に1぀、実行䞭にもう1぀必芁です。ここで、チェヌンビルドが圹立ちたす。



連鎖ビルド



OpenShiftのドキュメントにチェヌンビルド に぀いお曞かれおいる内容は次のずおりです。



「2぀のアセンブリを盞互にリンクできたす。1぀はコンパむル枈み゚ンティティを生成し、もう1぀はその゚ンティティを実行するために䜿甚される別のむメヌゞでその゚ンティティをホストしたす。」



぀たり、Web App Builderむメヌゞを䜿甚しおビルドを実行し、次にWebサヌバヌむメヌゞNGINXを䜿甚しおコンテンツを提䟛できたす。



したがっお、Web App Builderむメヌゞを玔粋なビルダヌずしお䜿甚しおも、実行時むメヌゞは小さくなりたす。



それでは、具䜓的な䟋でこれを芋おみたしょう。



このチュヌトリアルでは、create-react-appコマンドラむンツヌルで構築された単玔なReactアプリケヌションを䜿甚したす。OpenShiftテンプレヌトファむル



は、すべおをたずめるのに圹立ちたす。



このファむルを詳しく芋お、パラメヌタのセクションから始めたしょう。



parameters:
  - name: SOURCE_REPOSITORY_URL
    description: The source URL for the application
    displayName: Source URL
    required: true
  - name: SOURCE_REPOSITORY_REF
    description: The branch name for the application
    displayName: Source Branch
    value: master
    required: true
  - name: SOURCE_REPOSITORY_DIR
    description: The location within the source repo of the application
    displayName: Source Directory
    value: .
    required: true
  - name: OUTPUT_DIR
    description: The location of the compiled static files from your web apps builder
    displayName: Output Directory
    value: build
    required: false


ここではすべおがかなり明確ですが、OUTPUT_DIRパラメヌタヌに泚意する必芁がありたす。この䟋のReactアプリケヌションの堎合、Reactはデフォルト倀を出力フォルダヌずしお䜿甚するため、心配する必芁はありたせんが、Angularなどの堎合は、このパラメヌタヌを必芁に応じお倉曎する必芁がありたす。



それでは、ImageStreamsセクションを芋おみたしょう。



- apiVersion: v1
  kind: ImageStream
  metadata:
    name: react-web-app-builder  // 1 
  spec: {}
- apiVersion: v1
  kind: ImageStream
  metadata:
    name: react-web-app-runtime  // 2 
  spec: {}
- apiVersion: v1
  kind: ImageStream
  metadata:
    name: web-app-builder-runtime // 3
  spec:
    tags:
    - name: latest
      from:
        kind: DockerImage
        name: nodeshift/ubi8-s2i-web-app:10.x
- apiVersion: v1
  kind: ImageStream
  metadata:
    name: nginx-image-runtime // 4
  spec:
    tags:
    - name: latest
      from:
        kind: DockerImage
        name: 'centos/nginx-112-centos7:latest'


3番目ず4番目の画像を芋おください。どちらもDockerむメヌゞずしお定矩されおおり、どこから来たのかがはっきりずわかりたす。



3番目の画像はweb-app-builderで、Dockerハブに10.xタグが付いたnodeshift / ubi8-s2i-web-appから取埗されたす。



4぀目は、Dockerハブに最新のタグが付いたNGINXむメヌゞバヌゞョン1.12です。



それでは、最初の2぀の画像を芋おみたしょう。これらは䞡方ずも開始時には空であり、ビルドフェヌズでのみ䜜成されたす。最初のむメヌゞであるreact-web-app-builderは、web-app-builder-runtimeむメヌゞず゜ヌスコヌドをマヌゞするアセンブリステップの結果になりたす。そのため、この画像の名前に「-builder」を付けたした。



2番目のむメヌゞreact-web-app-runtimeは、nginx-image-runtimeずreact-web-app-builderむメヌゞのいく぀かのファむルを組み合わせた結果になりたす。この画像は展開䞭にも䜿甚され、Webサヌバヌずアプリケヌションの静的HTML、JavaScript、CSSのみが含たれたす。



混乱しおいたすか次に、ビルド構成を芋おみたしょう。少し明確になりたす。



テンプレヌトには2぀のビルド構成がありたす。これが最初のもので、かなり暙準的です。



  apiVersion: v1
  kind: BuildConfig
  metadata:
    name: react-web-app-builder
  spec:
    output:
      to:
        kind: ImageStreamTag
        name: react-web-app-builder:latest // 1
    source:   // 2 
      git:
        uri: ${SOURCE_REPOSITORY_URL}
        ref: ${SOURCE_REPOSITORY_REF}
      contextDir: ${SOURCE_REPOSITORY_DIR}
      type: Git
    strategy:
      sourceStrategy:
        env:
          - name: OUTPUT_DIR // 3 
            value: ${OUTPUT_DIR}
        from:
          kind: ImageStreamTag
          name: web-app-builder-runtime:latest // 4
        incremental: true // 5
      type: Source
    triggers: // 6
    - github:
        secret: ${GITHUB_WEBHOOK_SECRET}
      type: GitHub
    - type: ConfigChange
    - imageChange: {}
      type: ImageChange


ご芧のずおり、1ずいうラベルの付いた行は、このビルドの結果が、前にImageStreamsセクションで芋たのず同じreact-web-app-builderむメヌゞに配眮されるこずを瀺しおいたす。



2ずいうラベルの付いた行は、コヌドの入手先を瀺しおいたす。私たちの堎合、これはgitリポゞトリであり、堎所、ref、およびコンテキストフォルダは、䞊蚘ですでに芋たパラメヌタによっお定矩されたす。



3ずいうラベルの付いた行は、パラメヌタセクションにすでに衚瀺されおいたす。この䟋でビルドされおいるOUTPUT_DIR環境倉数を远加したす。

4ずいうラベルの付いた行は、ImageStreamセクションですでに芋たweb-app-builder-runtimeむメヌゞを䜿甚するこずを瀺しおいたす。



5ずいうラベルの付いた行は、S2Iむメヌゞがそれをサポヌトし、Web App Builderむメヌゞがサポヌトしおいる堎合、むンクリメンタルビルドを䜿甚するこずを瀺しおいたす。最初の起動時に、アセンブリフェヌズの完了埌、むメヌゞはnode_modulesフォルダヌをアヌカむブファむルに保存したす。その埌の実行では、むメヌゞはそのフォルダヌを解凍するだけでビルド時間を短瞮したす。



そしお最埌に、6ずいうラベルの付いた行は、䜕かが倉曎されたずきに手動の介入なしでビルドが自動的に開始されるように、ほんの数個のトリガヌです。



党䜓ずしお、これはかなり暙準的なビルド構成です。



次に、2番目のビルド構成を芋おみたしょう。最初のものず非垞に䌌おいたすが、重芁な違いが1぀ありたす。



apiVersion: v1
  kind: BuildConfig
  metadata:
    name: react-web-app-runtime
  spec:
    output:
      to:
        kind: ImageStreamTag
        name: react-web-app-runtime:latest // 1
    source: // 2
      type: Image
      images:                              
        - from:
            kind: ImageStreamTag
            name: react-web-app-builder:latest // 3
          paths:
            - sourcePath: /opt/app-root/output/.  // 4
              destinationDir: .  // 5
             
    strategy: // 6
      sourceStrategy:
        from:
          kind: ImageStreamTag
          name: nginx-image-runtime:latest
        incremental: true
      type: Source
    triggers:
    - github:
        secret: ${GITHUB_WEBHOOK_SECRET}
      type: GitHub
    - type: ConfigChange
    - type: ImageChange
      imageChange: {}
    - type: ImageChange
      imageChange:
        from:
          kind: ImageStreamTag
          name: react-web-app-builder:latest // 7


したがっお、2番目のビルド構成はreact-web-app-runtimeであり、最初はかなり暙準的です。



1ずいうラベルの付いた行は新しいものではなく、ビルド結果がreact-web-app-runtimeむメヌゞに入れられおいるこずを瀺しおいたす。



前の構成ず同様に、2ずいうラベルの付いた行は、゜ヌスコヌドの取埗元を瀺しおいたす。しかし、ここではそれが画像から来おいるず蚀っおいるこずに泚意しおください。さらに、䜜成したばかりの画像から-react-web-app-builderから3ずいうラベルの付いた行に瀺されおいたす。䜿甚するファむルは画像内にあり、その堎所は4ずいうラベルの付いた行で指定されおいたす。この堎合は/ opt / app-root / output /です。あなたが芚えおいるなら、これは私たちのアプリケヌションを構築した結果から生成されたファむルが眮かれる堎所です。



5ずいうラベルの付いた行で指定されおいる宛先フォルダヌは、珟圚のディレクトリにすぎたせんこれはすべお、ロヌカルコンピュヌタヌではなく、OpenShiftず呌ばれる魔法のようなものの䞭で回転しおいるこずを忘れないでください。



戊略セクション6ずいうラベルの付いた行も、最初のビルド構成ず同様です。今回だけ、ImageStreamセクションですでに芋たnginx-image-runtimeを䜿甚したす。



最埌に、7ずいうラベルの付いた行は、react-web-app-builderむメヌゞが倉曎されるたびにこのビルドを起動するトリガヌセクションです。



それ以倖の堎合、このテンプレヌトには、かなり暙準的な展開構成ず、サヌビスおよびルヌトに関連するものが含たれおいたすが、これに぀いおは説明したせん。デプロむされるむメヌゞはreact-web-app-runtimeむメヌゞであるこずに泚意しおください。



アプリケヌションをデプロむしたす



したがっお、テンプレヌトを確認した埌、それを䜿甚しおアプリケヌションをデプロむする方法を芋おみたしょう。



ocずいうOpenShiftクラむアントツヌルを䜿甚しお、テンプレヌトを展開できたす。



$ find . | grep openshiftio | grep application | xargs -n 1 oc apply -f

$ oc new-app --template react-web-app -p SOURCE_REPOSITORY_URL=https://github.com/lholmquist/react-web-app


䞊のスクリヌンショットの最初のコマンドは、テンプレヌトを芋぀けるための意図的な゚ンゞニアリング方法です。/Openshiftio/application.yaml。



2番目のコマンドは、このテンプレヌトに基づいお新しいアプリケヌションを䜜成するだけです。



これらのコマンドを実行するず、2぀のアセンブリがあるこずがわかりたす。







抂芁画面に戻るず、ポッドが起動したす。







リンクをクリックするず、デフォルトのReactAppペヌゞであるアプリに移動したす。







付録1



Angular愛奜家のために、サンプルアプリもありたす。



テンプレヌトは、OUTPUT_DIR倉数を陀いお、ここでも同じです。



付録2



この蚘事では、WebサヌバヌNGINXずしお䜿甚したしたが、Apacheに眮き換えるのは非垞に簡単で、Apacheの途䞭でファむルテンプレヌトむメヌゞNGINXを倉曎するだけです。



結論



このシリヌズの最初のパヌトでは、OpenShiftプラットフォヌムに最新のWebアプリケヌションをすばやくデプロむする方法を玹介したした。今日は、Webアプリむメヌゞを䜜成するものず、チェヌンビルドを䜿甚しおNGINXなどの玔粋なWebサヌバヌず組み合わせお、より本番環境に察応したアプリビルドを䜜成する方法に぀いお説明したした。このシリヌズの次の最埌の蚘事では、OpenShiftでアプリケヌションの開発サヌバヌを実行し、ロヌカルファむルずリモヌトファむルの同期を維持する方法を瀺したす。



この蚘事シリヌズの内容










All Articles