AWS CodePipeline con Bitbucket

1 minute read

AWS CodePipeline and Bitbucket


En el trabajo necesitaba desplegar una aplicación usando AWS CodePipeline pero el repositorio donde se encuentra el código está en Bitbucket. Esto representó un desafío interesante porque AWS Pipeline no soporta Bitbucket, a diferencia de AWS CodeBuild que si lo soporta.

Si se investiga un poco en internet se pueden encontrar soluciones alternativas a este problema, como por ejemplo tener un webhook en el repositorio que llame a una función lambda y que genere un archivo en un bucket y que sea el disparador de AWS CodePipeline [1]. Otra posible solución es usar Bitbucket Pipelines para crear el objeto a colocar en el bucket, o incluso hacer un espejo del contenido del repositorio de Bitbucket en AWS CodeCommit.

Como no me terminaron de convencer estas soluciones alternativas, estuve pensando una solución donde todo quedara en AWS y que no tuviese que configurar los repositorios, y la clave fue el soporte que si tiene AWS CodeBuild con Bitbucket. Entonces, en vez de usar el pipeline de Bitbucket para generar la fuente de AWS CodePipeline, con AWS CodeBuild genero un archivo zip con el código fuente de la aplicación la cual luego es usada como entrada.

En particular esta aplicación es una imagen Docker que se genera con AWS CodeBuild y luego se guarda en AWS ECR, Este CodeBuild genera como artefacto de salida la definición de la tarea de ECS, la cual es tomada como entrada en la face de despliegue de ECS, actualizando el servicio y por ende la aplicación:

AWS Codebuild trigger


No todo es perfecto

Enumero algunas cosas que se debe considerar con esta solución:

  1. Para que CodeBuild acceda a los repositorios privados de Bitbucket se debe autenticar con un usuario desde la consola web de AWS. Si están pensando en automatizar la creación de este disparador consideren usar una cuenta de servicio que tenga acceso de solo lectura sobre el repositorio.
  2. El proyecto de AWS CodeBuild que sirve de disparador no se ejecutará automáticamente al actualizar el repositorio, por lo que tienen que iniciar el proyecto. Si quieren que esto sea automático o lo más parecido posible, pueden configurar una tarea programada en el proyecto:
AWS Codebuild trigger


[1] Integrating Git with AWS CodePipeline

Leave a Comment