El file AWS CodeDeploy Github ya existe

Intento utilizar AWS CodeDeploy para extraer mis últimos cambios de Github a un server. El problema con el que me estoy encontrando es en el paso de installation. Recibo este error:

Error CodeUnknownError Script Name MessageFile already exists at location /data/sites/wordpress/api_now_playing_staging.php Log Tail 

Y mi appspec.yml se ve así:

 version: 0.0 os: "linux" files: - source: "/" destination: "/data/sites/wordpress" permissions: - object: /data/sites/wordpress pattern: "**" owner: wp group: nginx mode: 755 type: - file 

Mi pregunta es si se supone que git está usando Pull CodeDeploy, ¿por qué estoy recibiendo el error de file ya existe? ¿Estoy haciendo algo mal?

¿Desplegó el mismo repository git con un grupo de implementación diferente o lo hizo manualmente antes? Si el mismo recurso ya existe en la carpeta de destino, CodeDeploy comprobará si el recurso en la carpeta de destino es creado por el mismo grupo de implementación. Si está utilizando el mismo grupo de implementación, volver a implementarlo no debería causar este problema.

La forma actual en que funciona el agente de host de CodeDeploy es desplegar los artefactos de implementación y moverlos al depósito correcto según el file de AppSpec. Incluso si implementa desde un repository Github, no se trata simplemente de ejecutar git pull en la carpeta de destino.

Como el file ya existe en el server, CodeDeploy tiene enlaces (BeforeInstall) que se pueden utilizar para ejecutar scripts personalizados para limpiar files existentes, ya que la installation de codedeploy no anula los files, si ya existen.

Lo hice funcionar así:

Tuve un par de implementaciones fallidas por varias razones. Lo que sucede es que el CD se mantiene en la instancia de EC2 y en la ruta / opt / codedeploy-agent / deployment-root / una carpeta nombrada por la ID de la implementación fallida [una agudeza alfanumérica muy larga]. Elimine esta carpeta y cree una nueva implementación [desde la console de UI aws] y vuelva a desplegar la aplicación. Ahora debería tener éxito.

Aviso: el CD no reescribe los files [que no han sido creados por su implementación específica]

CodeDeploy no implementa en una carpeta que ya hay código [files], ya que no quiere interferir con diferentes implementaciones de CD y / u otras herramientas de CI / CD [como Jenkins]. Solo se implementa en una ruta que ya implementó código con la implementación específica.

Puede vaciar la carpeta donde desea que su implementación suceda y volver a implementar su código a través de CD.

Todas las demás respuestas son correctas pero, en mi opinión, no resuelven su problema. Sin embargo, son un buen punto de partida. (abreviado: codedeploy ve un file que no era presumible allí en el código anterior implementación)

Esto se puede solucionar durante una implementación: "Opciones de contenido: elija la acción para AWS CodeDeploy durante una implementación cuando un file en una instancia de destino tiene el mismo nombre que un file en la revisión de la aplicación, para la misma location de destino".

Puede elegir fallar, sobrescribir y retener. Sobrescribir es probablemente la mejor opción en su caso.

No puedes encontrar más información

  • docs.aws.amazon.com (extrañamente bajo 'rollback')

  • cli docs.aws.amazon.com (see –file-exists-behavior (string))