Jenkins automatizará la implementación de aplicaciones ASP.NET

13

¿Existe alguna posibilidad de automatizar / semiautomatizar implementaciones de aplicaciones web ASP.NET usando Jenkins? Puede estar bajo entornos controlados o no controlados, para que los usuarios no controlados necesiten ingresar el ID de usuario y la contraseña. Estoy buscando formas de copiar los archivos del destino al destino y ejecutar scripts sql en el escenario de la granja web.

Editar Actualmente, estamos usando archivos bat para copiar / configurar el grupo de aplicaciones / cmd sql, etc. para implementar la aplicación. Pero para que esto funcione, el equipo de soporte de producción necesita descargar el código fuente, construir el proyecto y ejecutar los archivos bat para implementar la aplicación.

Ahora, queremos automatizar la implementación sin que el usuario descargue el código fuente y el usuario final solo necesita visitar una url y completar los parámetros de ID de usuario y contraseña y seleccionar la etiqueta svn y debería implementarse. Pero Jenkins se ejecuta con un inicio de sesión anónimo, por lo que el archivo bat existente no funcionará, ya que no tiene permisos para ejecutar el script.

Por lo tanto, me gustaría saber si existe alguna alternativa para este tipo de situación. Será bueno si el contexto del usuario se suplanta usando el ID de usuario y la contraseña ingresados, lo que permite que el archivo por lotes existente se ejecute sin más cambios. Si no es posible, también nos gustaría explorar otras ideas, pero no tenemos flexibilidad para elegir una herramienta automatizada como títere, etc., debemos quedarnos con estos archivos por lotes.

Soleado
fuente
Compartir su investigación ayuda a todos. Cuéntanos qué has probado y por qué no satisfizo tus necesidades. Esto demuestra que te has tomado el tiempo para intentar ayudarte a ti mismo, nos salva de reiterar respuestas obvias y, sobre todo, te ayuda a obtener una respuesta más específica y relevante. Vea también Cómo preguntar
mosquito
Actualice mi pregunta, avíseme si necesito proporcionar información adicional.
Soleado

Respuestas:

11

Compartiré lo que hemos estado usando y hacia dónde planeamos ir, tal vez te ayude a darte una mejor idea.

  • Actualmente usamos a Jenkins y Github juntos: una vez que algo se fusiona en maestro, Github le dice a Jenkins y comienza una compilación.
  • Utilizamos un script de Nant en Jenkins para construir el proyecto, ejecutar pruebas unitarias y, si todo se ve bien, inicia otro proyecto de Jenkins. El script de Nant también escupe un directorio con código totalmente compilado / CSS / JS minimizado, etc.
  • El proyecto secundario Jenkins toma el resultado de la compilación y lo envía de nuevo a Github, en un repositorio separado.
  • Un archivo .BAT se ejecuta cada 5 minutos en el servidor web provisional, y básicamente busca actualizaciones en ese repositorio. Si se encuentra una actualización, descargamos la última compilación, hacemos una copia de seguridad de nuestros archivos de ensayo y luego implementamos la compilación más reciente en la carpeta de ensayo.
  • Para ponerlo en funcionamiento, tenemos un archivo .BAT que se encarga de hacer una copia de seguridad de los archivos en vivo y copiar los archivos del repositorio sobre los archivos en vivo. Se ejecuta manualmente. No maneja las actualizaciones SQL (las hacemos a mano).

Ahora, obviamente, esto no es totalmente ideal, pero está funcionando para nosotros. Queremos expandir esto en el futuro para:

  • Use Web Deploy para enviar los archivos de Jenkins directamente a IIS y realice cualquier otro comando que necesitemos ejecutar.
  • Use migraciones automáticas (una característica de Entity Framework) para manejar todas las actualizaciones de SQL, como parte de la puesta en marcha.
Nicholas
fuente
Es casi lo mismo que estamos siguiendo. Pero, me preguntaba si Web Deploy podría instalar servicios de Windows, etc. y todo lo necesario para aplicaciones web complejas. Actualmente, estamos usando herramientas ps y está funcionando bien. Para DB, planeamos usar la herramienta DeployDB.
Soleado
¿Cómo maneja las situaciones cuando IIS está bloqueando archivos? ¿Cómo manejas las situaciones cuando alguien está trabajando con tu aplicación? ¿Tiene varios nodos o simplemente interrumpe la aplicación para los usuarios que trabajan en el momento de la publicación?
Piotr Perak
1
@Peri: olvidé mencionar en mi respuesta original, pero estamos planeando tener dos servidores de producción y cambiar entre ellos cuando sea necesario (usando IIS o nginx). Esto nos permitirá "calentar" el otro servidor en vivo cuando ocurra la implementación y luego pasar a él, por lo que no debería haber un tiempo de inactividad notable.
Nicholas
4

Ya estoy usando Jenkins para aplicaciones .Net y TFS.

  1. Agregue la configuración requerida en su proyecto y la transformación y registre el código.
  2. Obtenga lo último de TFS (use el complemento TFS)
  3. Compile el proyecto (use el complemento MSBuild). Puede publicar el código de Msbuild utilizando argumentos de línea de comandos.
  4. Sincronice el código de la ubicación de publicación al destino utilizando el comando msdeploy.exe (ubicado en "C: \ Archivos de programa (x86) \ IIS \ Microsoft Web Deploy V2 \ msdeploy.exe")
  5. Puede enviar correos electrónicos y hacer la copia de seguridad a través de Jenkins también.

También puede usar MSTest.exe para ejecutar la prueba unitaria y mostrarla en la consola jenkin o publicar el resultado de la prueba también.

Sanjeev Kumar
fuente