Tutorial: Configuración de un entorno Jenkins para habilitar CI/CD para una aplicación Java en Service Fabric

Este tutorial es la parte quinta de una serie. En ella se muestra cómo usar Jenkins para implementar actualizaciones en su aplicación. En este tutorial, el complemento Jenkins de Service Fabric se usa en combinación con el repositorio de GitHub que hospeda la aplicación Voting para implementarla en un clúster.

En la parte número cinco de la serie, aprenderá a:

  • Implementar el contenedor de Jenkins de Service Fabric en su máquina
  • Configurar el entorno de Jenkins para la implementación en Service Fabric
  • Actualizar la aplicación

En esta serie de tutoriales, se aprende a:

Requisitos previos

Extracción e implementación de la imagen de contenedor de Jenkins en Service Fabric

Jenkins se puede configurar dentro o fuera de un clúster de Service Fabric. En las siguientes instrucciones se muestra cómo configurarlo fuera de un clúster mediante una imagen de Docker proporcionada. Sin embargo, también se puede usar un entorno de compilación de Jenkins preconfigurado. La siguiente imagen de contenedor viene instalada con el complemento de Service Fabric y está lista para usarla inmediatamente con Service Fabric.

Nota

En el ejemplo siguiente se extrae una imagen de contenedor público de Docker Hub. Se recomienda autenticarse primero con la cuenta de Docker Hub (docker login) en lugar de realizar una solicitud de extracción anónima. Para mejorar la confiabilidad al usar contenido público, importe y administre la imagen en un registro de contenedor privado de Azure. Más información sobre cómo trabajar con imágenes públicas.

  1. Extraiga la imagen del contenedor de Jenkins de Service Fabric: docker pull rapatchi/jenkins:v10. Esta imagen lleva preinstalado el complemento Jenkins de Service Fabric.

  2. Ejecute la imagen de contenedor con la ubicación en la que están almacenados los certificados de Azure en el equipo local montado.

    docker run -itd -p 8080:8080 -v /service-fabric-java-quickstart/AzureCluster rapatchi/jenkins:v10
    
  3. Obtenga el identificador de la instancia de la imagen de contenedor. Puede enumerar todos los contenedores de Docker con el comando docker ps –a

  4. Recupere la contraseña de la instancia de Jenkins mediante el comando siguiente:

    docker exec [first-four-digits-of-container-ID] cat /var/jenkins_home/secrets/initialAdminPassword
    

    Si el identificador del contenedor es 2d24a73b5964, use 2d24.

    • Esta contraseña es necesaria para iniciar sesión en el panel de Jenkins desde el portal, que es http://<HOST-IP>:8080
    • Después de iniciar sesión por primera vez, puede crear su propia cuenta de usuario o usar la cuenta de administrador.
  5. Para configurar GitHub para que funcione con Jenkins, siga los pasos que se indican en Generating a new SSH key and adding it to the SSH agent (Generación de una clave SSH nueva y su adición al agente de SSH). Puesto que los comandos se ejecutan desde el contenedor de Docker, siga las instrucciones correspondientes al entorno Linux.

    • Use las instrucciones proporcionadas por GitHub para generar la clave SSH. A continuación, agregue la clave SSH a la cuenta de GitHub que hospeda el repositorio.

    • Ejecute los comandos que se mencionan en el vínculo anterior en el shell de Docker para Jenkins (no en el host).

    • Para iniciar sesión en el shell de Jenkins desde un host, use los siguientes comandos:

      docker exec -t -i [first-four-digits-of-container-ID] /bin/bash
      

      Asegúrese de que el clúster o el equipo donde se hospeda la imagen del contenedor de Jenkins o tienen una dirección IP pública. De esta forma, la instancia de Jenkins puede recibir notificaciones de GitHub.

Creación y configuración de trabajos de Jenkins

  1. En primer lugar, si no tiene un repositorio que pueda usar para hospedar el proyecto Voting en GitHub, cree uno. El repositorio se denomina dev_test en el resto de este tutorial.

  2. Cree un elemento nuevo en el panel de Jenkins en http://<HOST-IP>:8080.

  3. Escriba un nombre para dicho elemento (por ejemplo, MyJob). Seleccione free-style project (proyecto de estilo libre) y haga clic en OK (Aceptar).

  4. Vaya a la página del trabajo y haga clic en Configure (Configurar).

    a. En la sección general, seleccione la casilla GitHub project (Proyecto de GitHub) y especifique la dirección URL del proyecto de GitHub. Dicha URL hospeda la aplicación de Java para Service Fabric que desea integrar con el flujo de integración continua e implementación continua (CI/CD) de Jenkins (por ejemplo, https://github.com/testaccount/dev_test).

    b. En la sección Source Code Management (Administración del código fuente), seleccione Git. Especifique la dirección URL del repositorio que hospeda la aplicación de Java para Service Fabric que desea integrar con el flujo de CI/CD de Jenkins (por ejemplo, https://github.com/testaccount/dev_test.git). También puede especificar la rama que se va a compilar (por ejemplo, /master).

  5. Configure su instancia de GitHub (la que hospeda el repositorio) para que pueda comunicarse con Jenkins. Siga estos pasos:

    a. Vaya a la página del repositorio de GitHub. Vaya a Settings> (Configuración) Integrations and Services (Integraciones y servicios).

    b. Seleccione Add Service (Agregar servicio), escriba Jenkins y seleccione el complemento Jenkins-GitHub.

    c. Escriba la dirección URL del webhook de Jenkins (de forma predeterminada, será http://<PublicIPorFQDN>:8081/github-webhook/). Haga clic en Add/Update Service (Agregar o actualizar servicio).

    d. Se enviará un evento de prueba a la instancia de Jenkins. Debería ver una marca de verificación verde junto al webhook en GitHub y el proyecto se compila.

    Configuración de Jenkins para Service Fabric

  6. En la sección Build Triggers (Compilar desencadenadores), seleccione la opción de compilación que desea. Para este ejemplo, desea desencadenar una compilación cada vez que se produzca alguna inserción en el repositorio. Por tanto, selecciona GitHub hook trigger for GITScm polling (Desencadenador de enlace de GitHub para el sondeo de GITScm).

  7. En la sección de compilación, en la lista desplegable Add build step (Agregar paso de compilación), seleccione la opción Invoke Gradle Script (Invocar script de Gradle). En el widget que aparece, abra el menú de opciones avanzadas y especifique la ruta de acceso a Root build script (Script de compilación raíz) para la aplicación. Este toma el archivo build.gradle de la ruta de acceso especificada y funciona en consecuencia.

    Acción de compilación de Jenkins en Service Fabric

  8. En la lista desplegable Post-Build Actions (Acciones posteriores a la compilación), seleccione Deploy Service Fabric Project (Implementar proyecto de Service Fabric). Aquí es preciso proporcionar los detalles del clúster donde se implementará la aplicación de Service Fabric compilada por Jenkins. La ruta de acceso al certificado es donde el volumen se ha montado (/ tmp/myCerts).

    También puede proporcionar detalles adicionales usados para implementar la aplicación. Consulte la siguiente captura de pantalla para obtener un ejemplo de los detalles de la aplicación:

    Cuadro de diálogo de acciones posteriores a la compilación con opciones adicionales de implementación de proyectos de Service Fabric

    Nota:

    Este clúster puede ser el mismo que el que hospeda la aplicación del contenedor de Jenkins, en caso de que se vaya a usar Service Fabric para implementar la imagen del contenedor de Jenkins.

  9. Haga clic en Save(Guardar).

Actualización de la aplicación existente

  1. Actualice el título de HTML en el archivo VotingApplication/VotingWebPkg/Code/wwwroot/index.html con Service Fabric Voting Sample V2.

    <div ng-app="VotingApp" ng-controller="VotingAppController" ng-init="refresh()">
        <div class="container-fluid">
            <div class="row">
                <div class="col-xs-8 col-xs-offset-2 text-center">
                    <h2>Service Fabric Voting Sample V2</h2>
                </div>
            </div>
        </div>
    </div>
    
  2. Actualice la versión de ApplicationTypeVersion y ServiceManifestVersion a 2.0.0 en el archivo Voting/VotingApplication/ApplicationManifest.xml.

    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <ApplicationManifest xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="VotingApplicationType" ApplicationTypeVersion="2.0.0">
      <Description>Voting Application</Description>
      <ServiceManifestImport>
        <ServiceManifestRef ServiceManifestName="VotingWebPkg" ServiceManifestVersion="2.0.0"/>
      </ServiceManifestImport>
      <ServiceManifestImport>
            <ServiceManifestRef ServiceManifestName="VotingDataServicePkg" ServiceManifestVersion="1.0.0"/>
        </ServiceManifestImport>
        <DefaultServices>
          <Service Name="VotingWeb">
             <StatelessService InstanceCount="1" ServiceTypeName="VotingWebType">
                <SingletonPartition/>
             </StatelessService>
          </Service>
       <Service Name="VotingDataService">
                <StatefulService MinReplicaSetSize="3" ServiceTypeName="VotingDataServiceType" TargetReplicaSetSize="3">
                    <UniformInt64Partition HighKey="9223372036854775807" LowKey="-9223372036854775808" PartitionCount="1"/>
                </StatefulService>
            </Service>
        </DefaultServices>
    </ApplicationManifest>
    
  3. Actualice el campo de versión de ServiceManifest y el campo de versión de la etiqueta CodePackage en el archivo Voting/VotingApplication/VotingWebPkg/ServiceManifest.xml a 2.0.0.

    <CodePackage Name="Code" Version="2.0.0">
    <EntryPoint>
        <ExeHost>
        <Program>entryPoint.sh</Program>
        </ExeHost>
    </EntryPoint>
    </CodePackage>
    
  4. Para inicializar un trabajo Jenkins que realice una actualización de la aplicación, inserte los nuevos cambios en el repositorio de GitHub.

  5. En Service Fabric Explorer, haga clic en la lista desplegable Applications (Aplicaciones). Para ver el estado de la actualización, haga clic en la pestaña Upgrades in Progress (Actualizaciones en curso).

    Actualización en curso

  6. Si accede a http://<Host-IP>:8080, verá que la aplicación Voting funciona ahora completamente.

    Aplicación Voting local

Pasos siguientes

En este tutorial, ha aprendido a:

  • Implementar el contenedor de Jenkins de Service Fabric en su máquina
  • Configurar el entorno de Jenkins para la implementación en Service Fabric
  • Actualizar la aplicación