Estoy trabajando en un servicio informático que requerirá la implementación automática de nuestro software (~30 megas). El software es un servicio WCF, por lo que estoy atascado con Windows. No puedo usar mono porque usamos muchas clases que no están implementadas en él.
Podríamos realizar fácilmente la implementación en Linux a través de SSH y SFTP, que están habilitados de forma predeterminada. El servicio telnet debe iniciarse manualmente en instancias de Windows. ¿Hay alguna manera de aprovechar RDP para esto?
Puedo crear una AMI con telnet habilitado. Pero parece excesivo.
¿Cómo se automatiza la implementación en instancias predeterminadas de Windows? ¿O todo el mundo crea una AMI con su software ya instalado?
Respuesta1
RDP no es una buena opción para la automatización de Windows.
Una alternativa a ssh para Windows es WinRM: administración remota de Windows. Powershell tiene soporte integrado para WinRM. Y si está utilizando EC2 (no aparece en la pregunta, pero la pregunta está etiquetada como EC2), powershell está habilitado en la imagen de Windows predeterminada de Amazon. Sólo necesitas abrir el puerto 5985 en tu grupo de seguridad.
Aquí hay algunas instrucciones sobre cómo conectarse usando PowerShell:https://stackoverflow.com/questions/10237083/how-to-programmatically-remotely-execute-a-program-in-ec2-windows-instance/13284313#13284313
La alternativa a SFTP para Windows es CIFS (compartir archivos de Windows), pero no es una opción particularmente buena: el protocolo no está cifrado. También puede transferir archivos usando un script de PowerShell; vea un script de muestra aquí:http://poshcode.org/2216
Si está de acuerdo con crear su propia AMI, instale cygwin y su servidor sshd. Esto le brindará transferencia de archivos y ejecución remota a través de ssh a su instancia de Windows.
Respuesta2
RDP probablemente no sea la mejor manera de hacer lo que estás buscando.Comunicación remota con PowerShelles probablemente el mejor método para brindarle una experiencia similar a la "historia" de su implementación de Linux. Puede obtener sesiones de shell interactivas en máquinas remotas o ejecutar scripts de forma remota.
Al estar acostumbrado a tener un servidor SFTP incluido con el sistema operativo Linux, la transferencia de archivos en el mundo Windows se sentirá como un truco.
Puede ejecutar el protocolo para compartir archivos SMB directamente a través de Internet, pero esto generalmente se considera un riesgo para la seguridad.
El protocolo RDP tiene capacidad de transferencia de archivos incorporada, pero usar un cliente RDP de manera por lotes/no interactiva será un truco poco fiable (sin mencionar que el mecanismo de transferencia de archivos en RDP es, en sí mismo, un poco complicado). truco poco fiable).
El propio Powershell puededescargar archivos de servidores remotosde manera similar a wget
. No hago ninguna implementación de código en servidores remotos de Windows en mi trabajo, pero consideraría encarecidamente usar este método para "extraer" código a los servidores remotos si lo hiciera, ya que solo utiliza funcionalidad integrada.
Respuesta3
No está claro si está intentando automatizar la infraestructura y la implementación del servicio WCF.
Implementación de código
En Windows hay un par de formas, aunque me temo que no hay una respuesta mágica, y la arquitectura no es diferente de la de Linux. Las herramientas que utiliza y cuáles están disponibles en Windows listas para usar es donde están las diferencias.
1) Instale uno de SSH, SFTP, Telenet, etc. y luego use métodos similares a los que usa ahora en Linux junto con Batch o PowerShell. Como dice Evan Anderson, puede que esto le parezca extraño debido a las herramientas disponibles en Linux.
Si ha trabajado con Java, entonces el proceso genérico es el mismo, es decir, se debe crear el código antes de implementarlo y todo se puede automatizar mediante un script por lotes o powershell.
2) El método más escalable es utilizar un servidor de implementación automatizado como Octopus (como agente instalado en el destino de implementación) y, opcionalmente, un servidor de compilación como Jenkins o Bamboo. Además de que su código reside en un repositorio de código como Git, puede tener una integración e implementación continuas o automatizadas manualmente en función de una rama particular en su repositorio de git.
Nuevamente, el proceso genérico es el mismo que el de Java o algún otro lenguaje en Linux.