web-dev-qa-db-fra.com

J'essaie d'intégrer Bitbucket dans AWS Code Pipeline? Quelle est la meilleure approche?

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.

17
Nigel Fds

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

14
Kirkaiya

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

10
adebesin

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.

9
OllyTheNinja

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

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

4
binary

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

  1. définir un projet CodeBuild, avec

    • Source: Bitbucket qui utilise son WebHook pour écouter les événements git-Push.
    • Buildspec: construire le projet selon buildspec.yml
    • Sortie de magasin d'artefacts de la construction directement dans un conteneur S3.
  2. définir le pipeline:

    • Source: écouter les mises à jour de l'objet S3 précédemment défini
    • supprimer l'étape de construction
    • ajouter d'autres étapes, configurer l'étape de déploiement
3
Michael Kraxner

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.

  1. Créez CodeBuild qui prend en charge BitBucket à partir de maintenant. https://docs.aws.Amazon.com/codebuild/latest/userguide/sample-bitbucket-pull-request.html Créez également un web-hook qui se reconstruit chaque fois qu'un code est poussé vers le référentiel . Vous ne pouvez pas utiliser un hook Web si vous utilisez un référentiel Bitbucket public.
  2. La génération de code se déclenchera automatiquement lors de la validation et créera un fichier Zip et le stockera dans le compartiment s3.
  3. Créez un pipeline de code avec la source en tant que S3 et déployez-le à l'aide de codeDeploy. S3 étant une source valide.

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 .

3
Shubham Chopra

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 :

2
proeben