クラウドでのIaC:TerraformとResource ManagerをCI/CDパイプラインに組み込む―アセットのリリース/IaC in the Cloud: Integrating Terraform and Resource Manager into your CI/CD Pipeline - Release Assets

原文はこちら:https://blogs.oracle.com/developers/iac-in-the-cloud%3a-integrating-terraform-and-resource-manager-into-your-cicd-pipeline-release-assets

このシリーズではTerraformおよびOracle Cloudであなたのインスタンスを管理するためのResource Managerの使い方を学んできました。パート1で開発者向けのTerraformの基礎を学びました。パート2ではTerraformをインストールし、スクリプトを記述し適用しました。パート3ではTerraformスクリプトをResource Managerと組み合わせて実行し、パート4ではResource Managerを使っての変数値の入力とバリデーションプロセスをスキーマドキュメントに組み込みました。このポストでは、どうやってTerraformのInfrastructure as Codeを分散させるか、また、どうやってTerraformとResource ManagerをCI/CDパイプラインによるビルドプロセスに組み込むかについて説明することで、シリーズのまとめとしていきます。CI/CDツールについてここではGitHubおよびGitHubアクションズを用いていきますが、他のCI/CDツールでもプロセスはほぼ同様のはずです。

GitHub Actionsを使った配布可能なスタックの作成

ここでまずはじめに簡単に触れておきたいのが、Terraformスクリプトから配布可能なスタックを作成する方法についてです。基本的にはその方法とは、他の開発者が自身のテナンシーであなたの作成したスクリプトを実行できるよう、他の開発者に共有できる.zipファイルを作成するということになります。明らかにそのファイルはあなた自身のテナンシーでは利用できるでしょうが、配布するためにいいやり方についてはいくつかポイントがあります。GitHub Actionsを使ってZIPを作成するのはとても簡単で、単にbuild-stack.yamlというYAMLファイルをリポジトリの.github/workflowsディレクトリに加えるだけです。

このワークフローでのgistでは、毎回新しい'tag'バージョンがGitHubにプッシュされます。このワークフローでは以下が行われます:

  • コードのチェックアウト
  • GitHubのアーティファクトとしてZIPをパブリッシュ
  • GitHubリリースを作成
  • パブリッシュされたアーティファクトをリリースとしてアップロード

そしてYAMLファイルは以下の通りです。

name: oci-terraform-build-stack
on:
  push:
    tags:
      - "v*"
jobs:
  build-stack:
    name: Build Stack
    runs-on: ubuntu-latest
    steps:
      - name: 'Checkout'
        uses: actions/checkout@v2
      - name: 'Build Stack'
        run: |
          zip -r stack.zip *
      - name: 'Publish Stack'
        uses: actions/upload-artifact@v2-preview
        with:
          name: 'stack'
          path: 'stack.zip'
      - name: 'Create Release'
        if: success()
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
        with:
          tag_name: ${{github.ref}}
          release_name: Release ${{github.ref}}
          body: |
            Latest release
          draft: false
          prerelease: false
      - name: 'Upload Release Asset (Stack)'
        if: contains(github.ref, 'v')
        id: upload-release-asset-stack
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
        with:
          upload_url: ${{steps.create_release.outputs.upload_url}}
          asset_path: ./stack.zip
          asset_name: stack.zip
          asset_content_type: application/zip
view rawbuild-stack.yaml hosted with ❤ by GitHub

わたしのデモリポジトリでは、このファイルを保存、タグ付けしてGitHubにプッシュしています。ジョブが完了したら、あなたのリポジトリの"Releases"ページに行くとZIPがパブリッシュされていることを確認できるでしょう。

Tip: あなたの最新のリリースは常に https://github.com/[user name]/[repo name]/releases/latest.で見つかります

'Oracle Cloudにデプロイする'ボタンをプロジェクトに追加

ここまでで他のひとにも使えるZIPができました。そうしたら今度は'Oracle Cloudにデプロイする'ボタンをREADME.mdに追加して、みんながワンクリックであなたのスタックをデプロイできるようにしておきませんか?こちらのドキュメントにあるフォーマットに従って、READMI.mdにマークアップをコピペしましょう。

このポスト用の動くコードはわたしのリポジトリにありますので、チェックしてみてください:https://github.com/recursivecodes/oci-resouse-manager.demo

まとめ

このポストではGitHub Actionsでアセットを作成してパブリッシュし、'Oracle Cloudにデプロイ'ボタンをGitHubリポジトリに追加する、というここまでのTerraformシリーズの中で簡単ではありましたが重要なテーマを扱いました。次のポストでは、パイプラインの中からResource Managerスタックおよびジョブを作成し、CI/CDワークフローの中からそのジョブを直接適用する方法について学んでいきます。

0 件のコメント:

コメントを投稿