Close

Bitbucket Pipelines を使用したスクリプト タスクのヒント

Sten Pittet の顔写真
Sten Pittet

寄稿ライター

Bitbucket Pipelines によって、継続的なインテグレーションまたはデリバリー ワークフローをリポジトリに迅速に導入できます。このプロセスの重要な部分は、手動プロセスをスクリプトに変換して人手は不要な機械によって自動化できるスクリプトに変換することです。認証、依存関係のインストール、または課題の報告に関する問題がある可能性があるため、タスクを自動化するのが難しい場合もあります。このガイドでは、スクリプトを書くためのヒントを紹介します。

所要時間

30 分

対象者

継続的なデプロイや Bitbucket Pipelines を初めて使用する場合

ステップ 1: 機密情報をログ記録しない!

自動化の世界にさらに移行する前に、ログを確認して、API キー、認証情報、またはシステムの不正侵入に繋がりうる情報などの機密データを出力しないようにする必要があります。Bitbucket Pipelines によってスクリプトを実行するとすぐにログが保存されて、リポジトリにアクセスできるすべてのユーザーが読み取れるようになります。

ステップ 2: SSH キーによってリモート サーバーに接続する

多くの場合、認証は自動化で最も厄介な部分の 1 つです。SSH キーには、リモート サーバーへの接続を管理しやすくするうえにセキュリティが高いという二重のメリットがあります。Bitbucket Pipelines によって、リモート サーバーに接続するためのパイプライン実行ごとに新しいキー ペアを簡単に生成できます

Bitbucket Pipelines から SSH キーを直接生成する

実行中のパイプラインから接続できるようにするには、リモート サーバーに公開キーをコピーするだけです。たとえば、サーバー上に SSH キーが設定されると (URL または IP アドレスを使用可)、次のスクリプトはパスワード入力不要で /var/www ディレクトリの下にファイルをリストします。

bitbucket-pipelines.yml

image: node:4.6.0
   pipelines:
      default:
        - step:
           script:
              - ssh <user>@<server> ls -l /var/www

接続する必要があるすべてのサーバーの [既知のホスト] セクションへの登録を忘れないでください。そうしないと、リモート サーバーに接続しようとするとパイプラインが承認待ち状態で停止します。

ステップ 3: API キーと認証情報にセキュリティが確保された環境変数を使用する

スクリプトの一部としてリモート API を使用する必要がある場合は、API プロバイダーが API キーで保護されたリソースを使用できる可能性があります。セキュリティが確保された環境変数を使用して、Bitbucket Pipelines に認証情報を安全に追加できます。保存すると、スクリプトで呼び出せるようになって、ログ出力ではマスクされたままになります。

Bitbucket Pipelines はセキュリティで保護された変数をログでマスクしたままにします

ステップ 4: コマンドを非インタラクティブ モードで実行する

スクリプトの一部として依存関係をインストールする必要がある場合は、ユーザーに検証や入力を求めるプロンプトが表示されないことをご確認ください。非インタラクティブに実行できるフラグがあるかどうかを確認するには、使用しているコマンドのドキュメントをご参照ください。

たとえば、以下のコマンドのフラグ -y は Debian サーバーに PostgreSQL をインストールします。

apt-get install -y postgresql

フラグ -q を使用すると、非インタラクティブな方法で Google Cloud SDK コマンドを実行できます。

gcloud -q app deploy app.yaml

ステップ 5: 準備が整った独自の Docker イメージを構築する

パイプラインの実行に必要な依存関係のインストールには、時間がかかる可能性があります。アプリケーションをビルドしてテストするのに必要な基本的なツールとパッケージによって独自の Docker イメージを作成することで、実行時間を大幅に節約できます。

たとえば、次の Pipelines 構成では、AWS CLI を最初にインストールして後で使用し、アプリケーションを AWS Elastic Beanstalk にデプロイします。

bitbucket-pipelines.yml

image: node:7.5.0
   pipelines:
      default:
       - step:
          script: # Modify the commands below to build your repository.
           - apt-get update && apt-get install -y python-dev
           - curl -O https://bootstrap.pypa.io/get-pip.py
           - python get-pip.py
           - pip install awsebcli --upgrade
           - npm install
           - npm test
           - eb init helloworld-beanstalk-bbp -r eu-west-1 -p node
           - eb deploy hw-eb-tutorial

ここでの課題は、AWS CLI がコミットごとに変更されないことです。つまり、デフォルトでバンドルできる依存関係をインストールする時間が無駄になります。

次の Dockerfile を使用して、Elastic Beanstalk デプロイ用のカスタム Docker イメージを作成できます。

Dockerfile

FROM node:7.5.0 
RUN apt-get update \   && apt-get install -y python-dev \   && cd /tmp \   && curl -O https://bootstrap.pypa.io/get-pip.py \   && python get-pip.py \   && pip install awsebcli --upgrade \   && apt-get clean \   && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

参照 spittet/my-custom-image の下でプッシュすると、Bitbucket Pipelines 構成を簡素化してアプリケーションを構築、テスト、デプロイするために必要なコマンドのみを含められます。

bitbucket-pipelines.yml

image: spittet/my-custom-image
   pipelines:
     default:
       - step:
            script: # Modify the commands below to build your repository.
              - npm install
              - npm test
              - eb init helloworld-beanstalk-bbp -r eu-west-1 -p node
              - eb deploy hw-eb-tutorial

最後のアドバイス: スクリプトはコードでもあります

これらのヒントは、手動タスクを Bitbucket Pipelines などのサービスによって繰り返し確実に実行できる自動プロセスに変換するのに役立ちます。最終的に、これらはリリースを保護して、複数のサーバーやプラットフォームにまたがる本番環境全体のデプロイをトリガーできる、強力なツールになります。

自動化スクリプトをコードとして扱ってコードと同じレビューと品質プロセスを実行する必要があるのは、このためです。幸いにも、これは Bitbucket で簡単に実行できます。パイプライン構成がコードでチェックインされて、適切なコンテキストでプル リクエストを作成できます。

最後に、スクリプトを本番環境に適用する前に、テスト環境でスクリプトを実行することを忘れないでください。このちょっとした作業によって、誤って本番データを消去することを防止できます。

Sten Pittet
Sten Pittet

私はソフトウェアビジネスに 10 年間携わり、開発からプロダクトマネージメントまでさまざまな業務を経験してきました。アトラシアンで 5 年間開発ツールに携わった後、現在はソフトウェアの構築について記事を書いています。プライベートではかわいい赤ちゃんと過ごしながら、父親力を磨いています。


この記事を共有する
次のトピック

おすすめコンテンツ

次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。

DevOps のイラスト

DevOps コミュニティ

DevOps のイラスト

DevOps ラーニング パス

マップのイラスト

無料で始める

DevOps ニュースレター購読

Thank you for signing up