leader_only 在 Elastic Beanstalk 中不起作用

leader_only 在 Elastic Beanstalk 中不起作用

我们正在使用 Jenkins 为 drupal 网站进行 CI/CD。现在,我们需要运行 drush 命令,这些命令应仅在单个实例中运行。

为此,我们创建了 elastic beanstalk 配置脚本,其中参数 leader_only 为 true,但它在部署时仍在所有实例中运行 drush 命令,而不是在一个实例中运行。

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/drushcmd.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash
       . /opt/elasticbeanstalk/support/envvars
        cd /usr/local/bin
        sudo cp /usr/bin/composer.phar /usr/local/bin/composer
        sudo ln -s /usr/local/bin/composer /usr/bin/composer
        composer --version
        git clone https://github.com/drush-ops/drush.git /usr/local/src/drush
        cd /usr/local/src/drush
        git checkout 7.0.0-alpha5
        sudo ln -s /usr/local/src/drush/drush /usr/bin/drush        
        composer install
        export DRUSH_PHP=/usr/bin/php7
        drush --version

container_commands:
  001customize:
    command: "/opt/elasticbeanstalk/hooks/appdeploy/post/drushcmd.sh"
    leader_only: true
    ignoreErrors: true

答案1

很难直接说出发生了什么,但我相信发生的事情是,经过 2-3 次部署后,ELB 环境中的多个实例包含该文件,因为在部署过程中同一个实例没有被选为领导者。

您需要drushcmd.sh在创建文件之前删除所有实例上的文件 - 您正在多个实例上创建该文件。

通过删除(无论是否存在)所有实例上的文件,您可以确保该文件仅存在于一个实例 - 领导者上。

container_commands:
  001_delete_deployment_hook:
    command: "rm -f /opt/elasticbeanstalk/hooks/appdeploy/post/drushcmd.sh"
    ignoreErrors: true
  002_create_deployment_hook:
    command: "/opt/elasticbeanstalk/hooks/appdeploy/post/drushcmd.sh"
    leader_only: true
    ignoreErrors: true

注意如何001_delete_deployment_hook确保leader_only我们删除所有实例

相关内容