web-dev-qa-db-ja.com

BitbucketをAWS Code Pipelineに統合しようとしていますか?最善のアプローチは何ですか?

BitbucketのコードをAWS Code Pipelineに統合したい。同じ上で適切な例を見つけることができません。私のソースコードは.Netにあります。誰かが私を案内してもらえますか。ありがとう。

17
Nigel Fds

Lambda関数(CodePipelineを呼び出す)を呼び出すAWS API Gatewayを呼び出すwebhookを使用して、BitbucketをAWS CodePipelineと統合できます。これについて説明するAWSブログがあります。 GitとAWS CodePipelineの統合

14
Kirkaiya

BitBucketには、AWSサービスにコードをデプロイできるPipeLinesというサービスがあります。パイプラインを使用して、マスターブランチからCodePipelineに接続されているS3バケットに更新をパッケージ化し、プッシュします

注意:

  • リポジトリでPipeLinesを有効にする必要があります

  • PipeLinesでは、プロジェクト内に配置する必要があるbitbucket-pipelines.ymlという名前のファイルが必要です。

  • BitBucket Pipelines UIでアカウントAWS_ACCESS_KEY_IDおよびAWS_SECRET_ACCESS_KEYを設定していることを確認してください。これには暗号化オプションが付属しているため、すべてが安全で安全です

次に、DynamoDbという名前のディレクトリの内容をS3バケットにコピーするbitbucket-pipelines.ymlの例を示します

pipelines:
  branches:
    master:
      - step:
          script:
            - apt-get update # required to install Zip
            - apt-get install -y Zip # required if you want to Zip repository objects
            - Zip -r DynamoDb.Zip .
            - apt-get install -y python-pip
            - pip install boto3==1.3.0 # required for s3_upload.py
            # the first argument is the name of the existing S3 bucket to upload the artefact to
            # the second argument is the artefact to be uploaded
            # the third argument is the the bucket key
            - python s3_upload.py LandingBucketName DynamoDb.Zip DynamoDb.Zip # run the deployment script

プロジェクトのbitbucket-pipelines.ymlファイルと一緒にデプロイする必要があるPythonアップロードスクリプトの動作例を次に示します。上記でPythonスクリプトs3_upload.pyという名前を付けました:

from __future__ import print_function
import os
import sys
import argparse
import boto3
from botocore.exceptions import ClientError

def upload_to_s3(bucket, artefact, bucket_key):
    """
    Uploads an artefact to Amazon S3
    """
    try:
        client = boto3.client('s3')
    except ClientError as err:
        print("Failed to create boto3 client.\n" + str(err))
        return False
    try:
        client.put_object(
            Body=open(artefact, 'rb'),
            Bucket=bucket,
            Key=bucket_key
        )
    except ClientError as err:
        print("Failed to upload artefact to S3.\n" + str(err))
        return False
    except IOError as err:
        print("Failed to access artefact in this directory.\n" + str(err))
        return False
    return True


def main():

    parser = argparse.ArgumentParser()
    parser.add_argument("bucket", help="Name of the existing S3 bucket")
    parser.add_argument("artefact", help="Name of the artefact to be uploaded to S3")
    parser.add_argument("bucket_key", help="Name of the S3 Bucket key")
    args = parser.parse_args()

    if not upload_to_s3(args.bucket, args.artefact, args.bucket_key):
        sys.exit(1)

if __name__ == "__main__":
    main()

Sourceステージが1つだけのCodePipelineの例を次に示します(さらに追加することもできます)。

Pipeline:
  Type: "AWS::CodePipeline::Pipeline"
  Properties:
    ArtifactStore:
      # Where codepipeline copies and unpacks the uploaded artifact
      # Must be versioned
      Location: !Ref "StagingBucket"
      Type: "S3"
    DisableInboundStageTransitions: []
    RoleArn:
      !GetAtt "CodePipelineRole.Arn"
    Stages:
      - Name: "Source"
        Actions:
          - Name: "SourceTemplate"
            ActionTypeId:
              Category: "Source"
              Owner: "AWS"
              Provider: "S3"
              Version: "1"
            Configuration:
              # Where PipeLines uploads the artifact
              # Must be versioned
              S3Bucket: !Ref "LandingBucket"
              S3ObjectKey: "DynamoDb.Zip" # Zip file that is uploaded
            OutputArtifacts:
              - Name: "DynamoDbArtifactSource"
            RunOrder: "1"

LandingBucket:
  Type: "AWS::S3::Bucket"
  Properties:
    AccessControl: "Private"
    VersioningConfiguration:
      Status: "Enabled"
StagingBucket:
  Type: "AWS::S3::Bucket"
  Properties:
    AccessControl: "Private"
    VersioningConfiguration:
      Status: "Enabled"

このPythonコードと他の例への参照は、ここで見つけることができます:https://bitbucket.org/account/user/awslabs/projects/BP

10
adebesin

これを見つけた人は誰でもフォローアップしてください。

AWS CodeBuildはAtlassian Bitbucket Cloudをソースタイプとしてサポートするようになり、既存のサポートされているソースであるAWS CodeCommit、Amazon S3、およびGitHubと並んで4番目になりました。

つまり、@ Kirkaiyaのリンクで提案されているように、Bitbucketと統合するためにラムダ関数を実装する必要はありません。それは、ユースケースまたはBitbucketの非クラウドバージョンと統合する場合によっては依然として有効なソリューションです。

AWSブログに投稿2017年8月10日- https://aws.Amazon.com/about-aws/whats-new/2017/08/aws-codebuild-now-supports-atlassian-bitbucket-cloud- as-a-source-type /

そして、コメンターを明確にするために、このリンクはCodeBuildではなくCodePipeline:パイプラインをトリガーする方法を見つける必要がありますが、トリガーされると、CodeBuildはパイプラインをトリガーする前にコードをS3またはAWS CodeCommitにコピーするのではなく、BitBucketからコードをプルします。

9
OllyTheNinja

AWS CodeBuildはBitbucket Pull Requestの構築をサポートするようになりました

CodeBuildを使用してコードをs3に圧縮し、CodePipelineのソースとして使用できます。

https://lgallardo.com/2018/09/07/codepipeline-bitbucket

4
binary

@binaryの回答の代替、および@OllyTheNinjaの回答の説明:

要するに、CodeBuildにBitbucketのWebhookをリッスンさせ、S3オブジェクトに書き込みます。パイプラインでは、後者の更新イベントをリッスンします。

AWSコードスイートで

  1. codeBuildプロジェクトを定義します。

    • ソース:WebHookを使用してgit-PushイベントをリッスンするBitbucket。
    • Buildspec:buildspec.ymlに従ってプロジェクトをビルドします
    • ビルドのアーティファクトストアの出力をS3コンテナーに直接。
  2. パイプラインを定義します。

    • ソース:以前に定義されたS3オブジェクトの更新をリッスンします
    • ビルドステップの削除
    • 他の手順を追加し、展開手順を構成します
3
Michael Kraxner

ラムダを使用せずにソースをbitbucketとしてAWS CodePipelineを使用してビルドデプロイプロセスを自動化する方法を探している場合は、次の手順を実行します。

  1. 現在、BitBucketをサポートするCodeBuildを作成します。 https://docs.aws.Amazon.com/codebuild/latest/userguide/sample-bitbucket-pull-request.html また、コードがリポジトリにプッシュされるたびに再構築するウェブフックを作成します。パブリックBitbucketリポジトリを使用する場合、Webフックを使用できません。
  2. コードビルドはコミット時に自動的にトリガーされ、Zipファイルを作成してs3バケットに保存します。
  3. ソースをS3としてコードパイプラインを作成し、codeDeployを使用してデプロイします。 S3は有効なソースです。

注-1。 webhookを作成するには、bitbucketの管理者アクセス権が必要です。そのため、コミットからデプロイまでのプロセスは完全に自動化されています。 2.現在(4月19日)、CodeBuildはプルリクエストマージのwebhookをサポートしていません。必要に応じて、毎日コードビルドをトリガーするトリガーを作成できます。

定期的にコードをビルドするトリガーを作成することもできます https://docs.aws.Amazon.com/codebuild/latest/userguide/trigger-create.html

アップデート 6月19日)-PR_MergeのプルリクエストビルドはCodeBuildでサポートされるようになりました。リファレンス:---(https://docs.aws.Amazon.com/codebuild/latest/userguide/sample-bitbucket-pull-request.html#sample-bitbucket-pull-request-filter-webhook-events

3
Shubham Chopra

私にとって、BitbucketをAWSサービスと統合する最良の方法は、パイプラインを使用して、コミットを(ミラー)AWS CodeCommitリポジトリにミラーリングすることです。そこから、AWS上のすべてのサービスに最適に統合できます。優れたハウツーを見つけることができます: here

2
proeben