BitbucketのコードをAWS Code Pipelineに統合したい。同じ上で適切な例を見つけることができません。私のソースコードは.Netにあります。誰かが私を案内してもらえますか。ありがとう。
Lambda関数(CodePipelineを呼び出す)を呼び出すAWS API Gatewayを呼び出すwebhookを使用して、BitbucketをAWS CodePipelineと統合できます。これについて説明するAWSブログがあります。 GitとAWS CodePipelineの統合
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
これを見つけた人は誰でもフォローアップしてください。
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からコードをプルします。
AWS CodeBuildはBitbucket Pull Requestの構築をサポートするようになりました
CodeBuildを使用してコードをs3に圧縮し、CodePipelineのソースとして使用できます。
@binaryの回答の代替、および@OllyTheNinjaの回答の説明:
要するに、CodeBuildにBitbucketのWebhookをリッスンさせ、S3オブジェクトに書き込みます。パイプラインでは、後者の更新イベントをリッスンします。
AWSコードスイートで
codeBuildプロジェクトを定義します。
パイプラインを定義します。
ラムダを使用せずにソースをbitbucketとしてAWS CodePipelineを使用してビルドデプロイプロセスを自動化する方法を探している場合は、次の手順を実行します。
注-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 。
私にとって、BitbucketをAWSサービスと統合する最良の方法は、パイプラインを使用して、コミットを(ミラー)AWS CodeCommitリポジトリにミラーリングすることです。そこから、AWS上のすべてのサービスに最適に統合できます。優れたハウツーを見つけることができます: here :