我想将Bitbucket的代码集成到AWS Code Pipeline中。我无法找到相同的例子。我的源代码是.Net。 有人可以指导我。 感谢。
答案 0 :(得分:10)
您可以使用调用AWS API Gateway的webhook来集成Bitbucket和AWS CodePipeline,后者会调用Lambda函数(调用CodePipeline)。有一个AWS博客可以引导您:Integrating Git with AWS CodePipeline
答案 1 :(得分:9)
BitBucket有一个名为PipeLines
的服务,可以将代码部署到AWS服务。使用管道打包并将更新从主分支推送到连接到CodePipeline
的S3存储桶
注意:
您必须在资源库中启用PipeLines
PipeLines需要一个名为bitbucket-pipelines.yml
的文件,该文件必须放在项目中
确保在BitBucket管道UI中设置帐户AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY。这附带一个加密选项,所有这些都是安全可靠的
这是一个示例bitbucket-pipelines.yml
,它将名为DynamoDb的目录的内容复制到S3存储桶
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
以下是Python上传脚本的工作示例,该脚本应与项目中的bitbucket-pipelines.yml
文件一起部署。上面我已经命名了我的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
阶段的示例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
答案 2 :(得分:7)
跟进任何发现此事的人:
AWS CodeBuild现在支持Atlassian Bitbucket Cloud作为源类型,使其成为现有支持来源的第四个:AWS CodeCommit,Amazon S3和GitHub。
这意味着您不再需要实现@Kirkaiya与Bitbucket集成的链接中建议的lambda函数 - 它仍然是一个有效的解决方案,具体取决于您的用例或者您是否与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/
答案 3 :(得分:4)
AWS CodeBuild Now Supports Building Bitbucket Pull Requests,我们可以在不使用webhooks / API Gateway / Lambda
的情况下利用它来提供更好的解决方案您可以使用CodeBuild将代码压缩到s3,并将其用作CodePipeline中的源代码
答案 4 :(得分:3)
@binary答案的替代方法,并澄清@OllyTheNinja的答案:
简而言之,:让CodeBuild侦听Bitbucket的Webhook并写入S3对象。在管道中监听后者的更新事件。
在AWS Codesuite中
使用
定义CodeBuild项目定义管道:
答案 5 :(得分:2)
对我来说,将Bitbucket与任何AWS服务集成的最佳方法是使用Pipelines将任何提交镜像到(镜像)AWS CodeCommit存储库。从那里,您可以完美地集成到AWS上的任何服务。 您可以找到一个出色的操作方法:here:
答案 6 :(得分:2)
如果您正在寻找一种使用AWS CodePipeline将源作为位桶的构建部署过程自动化而不使用lambda的方法,请执行以下步骤。
注-1。为了创建一个webhook,您需要具有bitbucket管理员访问权限 因此,从提交到部署的过程是完全自动化的。 2.截至目前(19年4月),CodeBuild不支持在Pull请求合并中使用webhook。如果需要,您可以创建触发器,该触发器每天都会触发代码构建。
您还可以创建触发器以定期{@ 3}}构建代码
答案 7 :(得分:0)
在12/2019 AWS launched a support for Atlassian Bitbucket Cloud中处于beta模式。
因此,现在您可以将AWS CodePipeline与Bitbucket Cloud本地集成