Je souhaite intégrer mon code de Bitbucket dans AWS Code Pipeline. Je suis incapable de trouver des exemples appropriés sur le même. Mon code source est en .Net. Quelqu'un peut-il me guider? Merci.
Vous pouvez intégrer Bitbucket à AWS CodePipeline en utilisant des webhooks qui appellent une passerelle API AWS, qui appelle une fonction Lambda (qui appelle dans CodePipeline). Il existe un blog AWS qui vous guide à travers ceci: Intégration de Git avec AWS CodePipeline
BitBucket dispose d'un service appelé PipeLines
qui peut déployer du code sur les services AWS. Utilisez des pipelines pour empaqueter et envoyer des mises à jour de votre branche principale vers un compartiment S3 qui est connecté à CodePipeline
Remarque:
Vous devez activer PipeLines
dans votre référentiel
PipeLines attend un fichier nommé bitbucket-pipelines.yml
qui doit être placé dans votre projet
Assurez-vous de définir vos comptes AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY dans l'interface utilisateur des pipelines BitBucket. Cela vient avec une option pour crypter afin que tout soit sûr et sécurisé
Voici un exemple bitbucket-pipelines.yml
qui copie le contenu d'un répertoire nommé DynamoDb dans un compartiment 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
Voici un exemple de travail d'un script de téléchargement Python qui devrait être déployé avec le bitbucket-pipelines.yml
fichier dans votre projet. Ci-dessus, j'ai nommé mon 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()
Voici un exemple de CodePipeline avec une seule étape Source
(vous voudrez peut-être en ajouter plus):
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"
Référence à ce Python ainsi que d'autres exemples peuvent être trouvés ici: https://bitbucket.org/account/user/awslabs/projects/BP
Faites un suivi pour quiconque trouve cela maintenant:
AWS CodeBuild prend désormais en charge Atlassian Bitbucket Cloud en tant que type de source, ce qui en fait le quatrième aux côtés des sources prises en charge existantes: AWS CodeCommit, Amazon S3 et GitHub.
Cela signifie que vous n'avez plus besoin d'implémenter une fonction lambda comme suggéré dans le lien de @ Kirkaiya pour l'intégrer à Bitbucket - c'est toujours une solution valide selon votre cas d'utilisation ou si vous intégrez avec la version non cloud de Bitbucket.
Publié sur le blog AWS le 10 août 2017 - https://aws.Amazon.com/about-aws/whats-new/2017/08/aws-codebuild-now-supports-atlassian-bitbucket-cloud- en tant que type de source /
Et pour clarifier pour les commentateurs, ce lien parle d'intégration avec CodeBuild pas CodePipeline : vous devez toujours trouver un moyen de déclencher le pipeline, mais lorsqu'il est déclenché, CodeBuild tirera le code de BitBucket plutôt que d'avoir à copier le code vers S3 ou AWS CodeCommit avant de déclencher le pipeline.
AWS CodeBuild prend désormais en charge la création de requêtes d'extraction Bitbucket , et nous pouvons l'utiliser pour une meilleure solution sans utiliser de webhooks/API Gateway/Lambda
Vous pouvez utiliser un CodeBuild pour compresser votre code en s3 et l'utiliser comme source dans votre CodePipeline
une alternative à la réponse de @binary, et une clarification à la réponse de @ OllyTheNinja:
en bref: laissez CodeBuild écouter le Webhook de Bitbucket et écrire dans un objet S3. dans le pipeline écoutez l'événement de mise à jour de ce dernier.
Dans AWS codesuite
définir un projet CodeBuild, avec
définir le pipeline:
Si vous cherchez un moyen d'automatiser votre processus de déploiement de build à l'aide d'AWS CodePipeline avec la source comme bitbucket sans utiliser lambdas, procédez comme suit.
Note 1. Pour créer un webhook, vous devez avoir un accès administrateur à bitbucket. Ainsi, le processus de validation au déploiement est totalement automatisé. 2. À partir de maintenant (avril 19), CodeBuild ne prend pas en charge la fusion de demande de webhook sur Pull. Si vous le souhaitez, vous pouvez créer un déclencheur qui déclenchera la construction de code, disons tous les jours.
Vous pouvez également créer des déclencheurs pour générer du code périodiquement https://docs.aws.Amazon.com/codebuild/latest/userguide/trigger-create.html
Mise à jour June'19) - Les versions de Pull Request pour PR_Merge sont désormais prises en charge dans CodeBuild. Référence: --- (https://docs.aws.Amazon.com/codebuild/latest/userguide/sample-bitbucket-pull-request.html#sample-bitbucket-pull-request-filter-webhook-events .
Pour moi, la meilleure façon d'intégrer Bitbucket à n'importe quel service AWS est d'utiliser des pipelines pour mettre en miroir n'importe quelle validation dans un référentiel AWS CodeCommit (miroir). À partir de là, vous bénéficiez d'une intégration optimale dans n'importe quel service sur AWS. Vous pouvez trouver un excellent mode d'emploi: ici :