автоматизировать развертывание в EC2 с использованием CodeDeploy и конвейера Bitbucket - PullRequest
0 голосов
/ 17 мая 2019

У меня есть проект, написанный на Django (Python Framework) и репозиторий на Bitbucket

Мне нужно настроить конвейер bitbucket со следующими действиями:

  1. Развертывание на промежуточном сервере и принятие на staging ответвление
  2. Развертывание на рабочий сервер, когда выпуск является черновиком только из главной ветви.

Я не уверен, где может быть черновик релиза в Bitbucket, например, в Github.

У меня есть следующий bitbucket-pipelines.yml file

image: python:3.7

pipelines:
  branches:
    staging:
      - step:
          deployment: staging
          script: 
            - apt-get update
            - apt-get install -y zip # required for packaging up the application
            - pip install boto3==1.3.0 # required for codedeploy_deploy.py
            - zip -r /tmp/artifact.zip * # package up the application for deployment
            - python codedeploy_deploy.py # run the deployment script

Теперь, в приложении Django я использую .env для обслуживания учетных данных и настроек.Для разных сред, например, разработки, подготовки и производства, у меня есть разные файлы среды для каждого

development.env
staging.env
production.env

Мне нужно переименовать / скопировать соответствующий файл в .env в зависимости от типа развертывания.

Как я могу настроить это в конвейере битовой памяти для выполнения этого шага?

appspec.yml содержимое:

version: 0.0
os: linux
files:
  - source: /
    destination: /var/www/html/project/
permissions:
  - object: /var/www/html
    pattern: "**"
    owner: ubuntu
    group: ubuntu
hooks:
  BeforeInstall:
    - location: scripts/clean_instance.sh
      timeout: 6000
      runas: root
  AfterInstall:
    - location: scripts/install_os_dependencies.sh
      timeout: 6000
      runas: root
    - location: scripts/install_python_dependencies.sh
      timeout: 6000
      runas: ubuntu
    - location: scripts/setup_environment.sh
      timeout: 6000
      runas: ubuntu
    - location: scripts/migrate.sh
      timeout: 6000
      runas: ubuntu
    - location: scripts/ngnix.sh
      timeout: 6000
      runas: ubuntu
  ApplicationStart:
    - location: scripts/start_application.sh
      timeout: 6000
      runas: ubuntu
  ApplicationStop:
    - location: scripts/stop_application.sh
      timeout: 6000
      runas: ubuntu

Могу ли я иметь несколько файлов appspec.yml в зависимости от типа развертывания?

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Если вы можете указать соглашения об именах для всей команды, то подход, основанный на соглашениях, может решить эту проблему.

Прежде всего, сделайте так, чтобы ветви развертывания имели то же имя, что и среда.Как уже упоминалось в вашем примере кода, когда имя ветви «промежуточное», приложение подберет staging.env для развертывания.В конвейере bitbucket вы можете ссылаться на имя ветки, используя переменную по умолчанию $ BITBUCKET_BRANCH.

https://confluence.atlassian.com/bitbucket/variables-in-pipelines-794502608.html

Bitbucket Pipelines предоставляет набор переменных по умолчанию, а также возможность определить вашисобственные переменные.Вы можете пометить переменные как защищенные для дополнительной защиты ваших паролей, токенов и других значений.Вы также можете обновить свои переменные при запуске конвейера вручную.

Во-вторых, замените вашу ссылку на файл env переменной в вашем скрипте установки среды.Например: $ filename.env

Передайте имя ветки вашему скрипту Python codedeploy_deploy.py и замените переменную в вашем скрипте установки на это.

Это решение работает только до тех пор, пока вы можетеподдерживать соглашения.

0 голосов
/ 21 мая 2019

Хорошим решением может быть наличие нескольких каталогов под именем версии приложения.

1.0.0->
      appspec.yml
      files/
      scripts/
...