Administrador de sistema simple de CI / CD


En el proceso, surgió la idea de automatizar la entrega de scripts de PowerShell, así como sincronizar el trabajo en equipo entre los administradores del sistema con scripts que se ejecutan en diferentes servidores. El artículo está diseñado para administradores de win simples que no están familiarizados con git, gitlab, ci / cd y otros problemas de desarrollo, por lo que si está interesado, solicite cat.

Comencemos con los problemas que surgieron al trabajar


  • falta de versionado;
  • inconsistencia entre colegas al finalizar los guiones;
  • pérdida de guiones útiles cuando los colegas se van;
  • entrega manual de guiones a lugares de su ejecución;
  • Desorden banal.

Todos estos problemas son realmente pequeños en casos aislados, pero cuando todo esto ya está en la escala del equipo y los montones de guiones, me gustaría poner las cosas en orden.

Para simplificar mi vida, utilicé el maravilloso producto Gitlab, ya implementado con nosotros y utilizado por los codificadores. No consideraré el proceso de instalación de gitlab y gitlab-runner , solo aclararé que ya tenemos un gitlab configurado con autorización de dominio y un corredor de Windows separado con el ejecutor powershell , que realizará nuestras tareas de implementación. Para las secuencias de comandos, uso el excelente código de Visual Studio .

Organizamos trabajos en gitlab


Así que aquí vamos, para empezar necesitamos hacer un grupo en gitlab, que incluirá a todos nuestros administradores de sistemas.

Creación grupal


A continuación, agregue a nuestros colegas a Miembros con derechos de desarrollador y podrá comenzar a crear el proyecto. Creamos el proyecto en nuestro grupo, para que nuestros colegas puedan acceder automáticamente a él.

Creación de proyectos


Después de crear el proyecto, en la primera página habrá todos los consejos sobre el tema "qué hacer a continuación". En nuestro caso, necesitamos iniciar archivos existentes desde nuestra estación de trabajo en gitlab. Por ejemplo, todo esto se encuentra en el directorio "E: \ scripts \ powershellmegaproject". Use el indicador apropiado y ejecute en su computadora:

cd E:\scripts\powershellmegaproject git init git remote add origin http://gitlab.domain.net/sysadminsdev/powershellmegaproject.git git add . git commit -m "Initial commit" git push -u origin master 

Bingo! Todos nuestros archivos del directorio "E: \ scripts \ powershellmegaproject" están ahora en nuestro proyecto.

Que sigue Abra VSCode e intente realizar cambios en nuestro script de PowerShell ubicado en este directorio. Una vez guardado el archivo, veremos una notificación en la sección Control de origen, donde puede ver los cambios y realizar una confirmación. A continuación, empujamos al servidor:

vscode git


Verifiquemos en el sitio web del proyecto en gitlab, habrá los contenidos reales de los archivos, y en el historial de confirmaciones puede rastrear los cambios.

Configuración de CI / CD


Es hora de configurar la entrega de scripts al servidor. Para que CI / CD funcione, un corredor debe estar disponible para su proyecto. Puede asignarlo en el administrador gitlab - corredores, o usar corredores compartidos.

Y ahora al proyecto. Para que CI / CD funcione, debe crear un archivo .gitlab-ci.yml con una descripción de las acciones en el directorio con nuestro proyecto (también puede ver una pista y ayuda sobre esto al acceder al menú gitlab - CI / CD - Pipelines). Puede elegir varios métodos para entregar archivos, desde simplemente copiar archivos a rsync o git pull al servidor deseado. Como estamos considerando el escenario más simple, solo copiará PowerShell. Para hacer esto, haga que la carpeta en el servidor de destino con el script esté disponible públicamente en la red y proporcione acceso de cambio al usuario bajo el cual se ejecuta nuestro servicio gitlab-runner.

Rellene .gitlab-ci.yml con contenido simple:

 deploy_stage: variables: DEST_DIR: \\srv-megaserver\scripts\powershellmegaproject script: - remove-item -path $DEST_DIR\* -recurse - gci -Recurse | Copy-Item -Destination $DEST_DIR 

Aquí escribimos la ruta a nuestro directorio en una variable (en otros proyectos, simplemente puede copiar este archivo y cambiar el directorio de destino) y con un simple comando powershell, primero eliminamos todo el contenido del directorio y luego copiamos todo desde nuestro proyecto a esta carpeta.

Comprometerse, impulsar cambios y verificar. En nuestra carpeta en el servidor, todos los archivos deben actualizarse. Puede ver el estado y la ejecución de Pipeline en la misma sección de nuestros gitlab - ci / cd - pipelines, un ejemplo de ejecución exitosa:

 Running with gitlab-runner 11.3.1~beta.4.g0aa5179e (0aa5179e) on gl-runner2-windows a24eda81 Using Shell executor... Running on SRV-GL-RUNNER2... Fetching changes... HEAD is now at e6e9a2c update ci file From http://gitlab.domain.net/sysadminsdev/powershellmegaproject e6e9a2c..5f5cfce master -> origin/master Checking out 5f5cfceb as master... Skipping Git submodules setup $ remove-item -path $DEST_DIR\* -recurse $ gci -Recurse | Copy-Item -Destination $DEST_DIR Job succeeded 

Supongamos que en este servidor ya se ha configurado una tarea para ejecutar este script desde un proyecto en el planificador, como resultado siempre obtenemos la ejecución de los archivos de proyecto reales.

¿Qué pasa con los colegas?


Es simple, crea una carpeta para proyectos, ve a ella en ps / cmd y clona el proyecto para nosotros.

 cd e:\projects git clone http://gitlab.domain.net/sysadminsdev/powershellmegaproject.git 

Todo, luego solo trabaje en VSCode abriendo la carpeta, haciendo commits y presionando.

¿Qué logramos como resultado?


  • todos los scripts se almacenan en el repositorio;
  • todo el grupo de administración puede trabajar con scripts;
  • todos los cambios son visibles en la historia;
  • cualquier administrador recién creado ve de inmediato todos los desarrollos y no necesita correr alrededor de los servidores y averiguar "dónde-qué se hace";
  • Todos los cambios productivos se envían automáticamente al "lugar de trabajo productivo".

Eliminamos todos nuestros problemas y también simplificamos enormemente nuestra vida como equipo.

Bono


Agregue el archivo README.md al directorio del proyecto para describir lo que sucede en estos scripts.
Agregue un archivo de registro de cambios para describir los cambios.

PD: ¿qué más puedes hacer? Puede girar el corredor en Docker, puede configurar el planificador en ansible , aún puede hacer muchas cosas más complicadas, pero el propósito del artículo era simplificar la comprensión de este kit de herramientas para principiantes.

Source: https://habr.com/ru/post/es427377/


All Articles