Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Importante
Aunque muchos servicios de Azure tienen complementos de Jenkins, la mayoría de estos complementos finalizaron la compatibilidad desde el 29 de febrero de 2024. La CLI de Azure es la forma recomendada actualmente de integrar Jenkins con los servicios de Azure. Para más información, consulte el artículo Complementos de Jenkins para Azure.
Para automatizar la fase de compilación y la de prueba del desarrollo de aplicaciones, puede utilizar una canalización de integración continua e implementación continua (CI/CD). En este tutorial, crearás una canalización de CI/CD en una máquina virtual de Azure, incluyendo cómo:
- Creación de una máquina virtual jenkins
- Instalación y configuración de Jenkins
- Creación de una integración de webhook entre GitHub y Jenkins
- Creación y desencadenamiento de trabajos de compilación de Jenkins desde confirmaciones de GitHub
- Creación de una imagen de Docker para la aplicación
- Verifica que los commits de GitHub construyen una nueva imagen de Docker y actualizan la aplicación en ejecución.
En este tutorial se usa la CLI dentro de Azure Cloud Shell, que se actualiza constantemente a la versión más reciente. Para abrir Cloud Shell, seleccione Pruébelo en la esquina superior de cualquier bloque de código.
Si decide instalar y usar la CLI localmente, en este tutorial es preciso que ejecute la CLI de Azure de la versión 2.0.30, u otra posterior. Ejecute az --version
para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.
Creación de una instancia de Jenkins
En un tutorial anterior sobre cómo personalizar una máquina virtual Linux en el primer arranque, ha aprendido a automatizar la personalización de máquinas virtuales con cloud-init. En este tutorial se usa un archivo cloud-init para instalar Jenkins y Docker en una máquina virtual. Jenkins es un popular servidor de automatización de código abierto que se integra perfectamente con Azure para habilitar la integración continua (CI) y la entrega continua (CD). Para más tutoriales sobre cómo usar Jenkins, consulte Jenkins en Azure Hub.
En el shell actual, cree un archivo denominado cloud-init-jenkins.txt y pegue la siguiente configuración. Por ejemplo, cree el archivo en Cloud Shell, no en la máquina local. Escriba sensible-editor cloud-init-jenkins.txt
para crear el archivo y ver una lista de editores disponibles. Asegúrese de que todo el archivo cloud-init se copia correctamente, especialmente la primera línea:
#cloud-config
package_upgrade: true
write_files:
- path: /etc/systemd/system/docker.service.d/docker.conf
content: |
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
- path: /etc/docker/daemon.json
content: |
{
"hosts": ["fd://","tcp://127.0.0.1:2375"]
}
runcmd:
- apt install openjdk-8-jre-headless -y
- wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
- sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
- apt-get update && apt-get install jenkins -y
- curl -sSL https://get.docker.com/ | sh
- usermod -aG docker azureuser
- usermod -aG docker jenkins
- service jenkins restart
Antes de poder crear una máquina virtual, cree un grupo de recursos con az group create. En el ejemplo siguiente se crea un grupo de recursos denominado myResourceGroupJenkins en la ubicación eastus :
az group create --name myResourceGroupJenkins --location eastus
Ahora cree una máquina virtual con el comando az vm create. Utilice el parámetro --custom-data
para pasar en el archivo de configuración de cloud-init. Proporcione la ruta de acceso completa a cloud-init-jenkins.txt si guardó el archivo fuera del directorio de trabajo actual.
az vm create --resource-group myResourceGroupJenkins \
--name myVM \
--image UbuntuLTS \
--admin-username azureuser \
--generate-ssh-keys \
--custom-data cloud-init-jenkins.txt
La máquina virtual tarda unos minutos en crearse y configurarse.
Para permitir que el tráfico web llegue a la máquina virtual, use az vm open-port para abrir el puerto 8080 para el tráfico de Jenkins y el puerto 1337 para la aplicación de Node.js que se usa para ejecutar una aplicación de ejemplo:
az vm open-port --resource-group myResourceGroupJenkins --name myVM --port 8080 --priority 1001
az vm open-port --resource-group myResourceGroupJenkins --name myVM --port 1337 --priority 1002
Configuración de Jenkins
Para acceder a la instancia de Jenkins, obtenga la dirección IP pública de la máquina virtual:
az vm show --resource-group myResourceGroupJenkins --name myVM -d --query [publicIps] --o tsv
Para fines de seguridad, debe escribir la contraseña de administrador inicial que se almacena en un archivo de texto en la máquina virtual para iniciar la instalación de Jenkins. Use la dirección IP pública obtenida en el paso anterior para SSH en la máquina virtual:
ssh azureuser@<publicIps>
Compruebe que Jenkins se está ejecutando con el service
comando :
$ service jenkins status
● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; generated)
Active: active (exited) since Tue 2019-02-12 16:16:11 UTC; 55s ago
Docs: man:systemd-sysv-generator(8)
Tasks: 0 (limit: 4103)
CGroup: /system.slice/jenkins.service
Feb 12 16:16:10 myVM systemd[1]: Starting LSB: Start Jenkins at boot time...
...
Vea el initialAdminPassword
de su instalación de Jenkins y cópielo.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Si el archivo aún no está disponible, espere un par de minutos más para que cloud-init complete la instalación de Jenkins y Docker.
Ahora abra un explorador web y vaya a http://<publicIps>:8080
. Complete la configuración inicial de Jenkins de la manera siguiente:
- Elija Seleccionar complementos para instalar
- Busque GitHub en el cuadro de texto de la parte superior. Active la casilla de GitHub y, a continuación, seleccione Instalar.
- Cree el primer usuario administrador. Escriba un nombre de usuario, como el administrador, y proporcione su propia contraseña segura. Por último, escriba un nombre completo y una dirección de correo electrónico.
- Seleccione Guardar y finalizar.
- Una vez que Jenkins esté listo, seleccione Empezar a usar Jenkins.
- Si el explorador web muestra una página en blanco al empezar a usar Jenkins, reinicie el servicio Jenkins. En la sesión ssh, escriba
sudo service jenkins restart
y, a continuación, actualice el explorador web.
- Si el explorador web muestra una página en blanco al empezar a usar Jenkins, reinicie el servicio Jenkins. En la sesión ssh, escriba
- Si es necesario, inicie sesión en Jenkins con el nombre de usuario y la contraseña que ha creado.
Creación de un webhook de GitHub
Para configurar la integración con GitHub, abra la aplicación de ejemplo Hello World deNode.js desde el repositorio de ejemplos de Azure. Para bifurcar el repositorio en su propia cuenta de GitHub, seleccione el botón Bifurcar en la esquina superior derecha.
Configura un webhook dentro de la bifurcación que hayas creado.
- Seleccione Configuración y, después, Webhooks en el lado izquierdo.
- Elija Agregar webhook y escriba Jenkins en el cuadro de filtro.
- En Dirección URL de carga, escriba
http://<publicIps>:8080/github-webhook/
. Asegúrese de incluir el final / - En Tipo de contenido, seleccione application/x-www-form-urlencoded.
- Para ¿Qué eventos le gustaría configurar para que activen este webhook?, seleccione Solo el evento de empuje.
- Establezca Activo como marcado.
- Haga clic en Agregar webhook.
Creación de un trabajo de Jenkins
Para que Jenkins responda a un evento en GitHub, como hacer commits de código, cree una tarea de Jenkins. Utilice las URL de su propia bifurcación de GitHub.
En el sitio web de Jenkins, seleccione Crear nuevos trabajos en la página principal:
- Escriba HelloWorld como nombre del trabajo. Elija Freestyle project (Proyecto freestyle) y, a continuación, seleccione Aceptar.
- En la sección General , seleccione Proyecto de GitHub y escriba la dirección URL del repositorio bifurcado, como
https://github.com/cynthn/nodejs-docs-hello-world
- En la sección Administración de código fuente , seleccione Git, escriba la dirección URL de .git del repositorio bifurcado, como.
https://github.com/cynthn/nodejs-docs-hello-world.git
- En la sección Desencadenadores de construcción, seleccione Desencadenador de enlace de GitHub para el sondeo de GITscm.
- En la sección Compilación , elija Agregar paso de compilación. Seleccione Ejecutar shell y escriba
echo "Test"
en la ventana de comandos. - Seleccione Guardar en la parte inferior de la ventana trabajos.
Prueba de la integración de GitHub
Para probar la integración de GitHub con Jenkins, realice un cambio en su bifurcación.
De nuevo en la interfaz de usuario web de GitHub, seleccione el repositorio bifurcado y, a continuación, seleccione el archivo index.js . Seleccione el icono de lápiz para editar este archivo para que la línea 6 lea:
response.end("Hello World!");
Para confirmar los cambios, seleccione el botón Confirmar cambios en la parte inferior.
En Jenkins, se inicia una nueva compilación en la sección Historial de compilación de la esquina inferior izquierda de la página de trabajo. Elija el vínculo del número de compilación y seleccione Salida de consola en el lado izquierdo de la pantalla. Puede ver los pasos que Realiza Jenkins cuando el código se extrae de GitHub y la acción de compilación genera el mensaje Test
en la consola. Cada vez que se realiza una confirmación en GitHub, el webhook se pone en contacto con Jenkins y desencadena una nueva compilación de esta manera.
Definición de la imagen de compilación de Docker
Para ver la aplicación Node.js en funcionamiento basada en tus confirmaciones de GitHub, vamos a construir una imagen de Docker para ejecutar la aplicación. La imagen se crea a partir de un Dockerfile que define cómo configurar el contenedor que ejecuta la aplicación.
En la conexión SSH a la máquina virtual, cambie al directorio del área de trabajo de Jenkins nombrado después del trabajo que creó en un paso anterior. En este ejemplo, se llamó HelloWorld.
cd /var/lib/jenkins/workspace/HelloWorld
Cree un archivo en este directorio del área de trabajo con sudo sensible-editor Dockerfile
y pegue el contenido siguiente. Asegúrese de que todo el Dockerfile se copia correctamente, especialmente la primera línea:
FROM node:alpine
EXPOSE 1337
WORKDIR /var/www
COPY package.json /var/www/
RUN npm install
COPY index.js /var/www/
Este Dockerfile usa la imagen base Node.js mediante Alpine Linux, expone el puerto 1337 en el que se ejecuta la aplicación Hello World y, a continuación, copia los archivos de la aplicación e inicializa.
Creación de reglas de compilación de Jenkins
En un paso anterior, creó una regla de compilación básica de Jenkins que genera un mensaje en la consola. Vamos a crear el paso de compilación para usar el archivo Docker y ejecutar la aplicación.
De nuevo en la instancia de Jenkins, seleccione el trabajo que creó en un paso anterior. Seleccione Configurar en el lado izquierdo y desplácese hacia abajo hasta la sección Compilación :
Elimine su paso de compilación existente
echo "Test"
. Seleccione la cruz roja en la esquina superior derecha del cuadro de paso de compilación existente.Elija Agregar paso de compilación y, a continuación, seleccione Ejecutar shell.
En el cuadro Comando , escriba los siguientes comandos de Docker y seleccione Guardar:
docker build --tag helloworld:$BUILD_NUMBER . docker stop helloworld && docker rm helloworld docker run --name helloworld -p 1337:1337 helloworld:$BUILD_NUMBER node /var/www/index.js &
Los pasos de compilación de Docker crean una imagen y la etiquetan con el número de compilación de Jenkins para que pueda mantener un historial de imágenes. Los contenedores existentes que ejecutan la aplicación se detienen y, a continuación, se quitan. A continuación, se inicia un nuevo contenedor con la imagen y se ejecuta la aplicación Node.js en función de las confirmaciones más recientes en GitHub.
Prueba de la canalización
Para ver toda la canalización en acción, edite de nuevo el archivo index.js en el repositorio de GitHub que has bifurcado y seleccione Confirmar cambio. Un nuevo trabajo se inicia en Jenkins basado en el webhook de GitHub. Se tarda unos segundos en crear la imagen de Docker e iniciar la aplicación en un nuevo contenedor.
Si es necesario, vuelva a obtener la dirección IP pública de la máquina virtual:
az vm show --resource-group myResourceGroupJenkins --name myVM -d --query [publicIps] --o tsv
Abra un explorador web y escriba http://<publicIps>:1337
. La aplicación Node.js ya está visible y muestra los últimos commits en tu bifurcación de GitHub así:
Ahora realice otra edición en el archivo index.js en GitHub y confirme el cambio. Espere unos segundos para que el trabajo se complete en Jenkins y, a continuación, actualice el explorador web para ver la versión actualizada de la aplicación que se ejecuta en un nuevo contenedor de la siguiente manera:
Pasos siguientes
En este tutorial, ha configurado GitHub para ejecutar un trabajo de compilación de Jenkins en cada confirmación de código e implementar un contenedor de Docker para probar la aplicación. Ha aprendido a:
- Creación de una máquina virtual jenkins
- Instalación y configuración de Jenkins
- Creación de una integración de webhook entre GitHub y Jenkins
- Creación y desencadenamiento de trabajos de compilación de Jenkins desde confirmaciones de GitHub
- Creación de una imagen de Docker para la aplicación
- Verifica que los commits de GitHub construyen una nueva imagen de Docker y actualizan la aplicación en ejecución.
Pase al siguiente tutorial para obtener más información sobre cómo integrar Jenkins con Azure DevOps Services.