Tutorial: Configuración de un entorno Jenkins para habilitar CI/CD para una aplicación Java en Service FabricTutorial: Configure a Jenkins environment to enable CI/CD for a Java application on Service Fabric

Este tutorial es la parte quinta de una serie.This tutorial is part five of a series. En ella se muestra cómo usar Jenkins para implementar actualizaciones en su aplicación.It shows you how to use Jenkins to deploy upgrades to your application. 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.In this tutorial, the Service Fabric Jenkins plugin is used in combination with a GitHub repository hosting the Voting application to deploy the application to a cluster.

En la parte número cinco de la serie, aprenderá a:In part five of the series, you learn how to:

  • Implementar el contenedor de Jenkins de Service Fabric en su máquinaDeploy Service Fabric Jenkins container on your machine
  • Configurar el entorno de Jenkins para la implementación en Service FabricSet up Jenkins environment for deployment to Service Fabric
  • Actualizar la aplicaciónUpgrade your application

En esta serie de tutoriales, se aprende a:In this tutorial series you learn how to:

Requisitos previosPrerequisites

Extracción e implementación de la imagen de contenedor de Jenkins en Service FabricPull and deploy Service Fabric Jenkins container image

Jenkins se puede configurar dentro o fuera de un clúster de Service Fabric.You can set up Jenkins either inside or outside a Service Fabric cluster. En las siguientes instrucciones se muestra cómo configurarlo fuera de un clúster mediante una imagen de Docker proporcionada.The following instructions show how to set it up outside a cluster using a provided Docker image. Sin embargo, también se puede usar un entorno de compilación de Jenkins preconfigurado.However, a preconfigured Jenkins build environment can also be used. La siguiente imagen de contenedor viene instalada con el complemento de Service Fabric y está lista para usarla inmediatamente con Service Fabric.The following container image comes installed with the Service Fabric plugin and is ready for use with Service Fabric immediately.

  1. Extraiga la imagen del contenedor de Jenkins de Service Fabric: docker pull rapatchi/jenkins:v10.Pull the Service Fabric Jenkins container image: docker pull rapatchi/jenkins:v10. Esta imagen lleva preinstalado el complemento Jenkins de Service Fabric.This image comes with Service Fabric Jenkins plugin pre-installed.

  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.Run the container image with the location where your Azure certificates are stored on your mounted local machine.

    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.Get the ID of the container image instance. Puede enumerar todos los contenedores de Docker con el comando docker ps –aYou can list all the Docker containers with the command docker ps –a

  4. Recupere la contraseña de la instancia de Jenkins mediante el comando siguiente:Retrieve the password of your Jenkins instance by running the following command:

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

    Si el identificador del contenedor es 2d24a73b5964, use 2d24.If container ID is 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>:8080This password is required for signing in to the Jenkins dashboard from portal, which is 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.After you sign in for the first time, you can create your own user account or use the admin account.
  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).Set up GitHub to work with Jenkins by using the steps mentioned in Generating a new SSH key and adding it to the SSH agent. Puesto que los comandos se ejecutan desde el contenedor de Docker, siga las instrucciones correspondientes al entorno Linux.Since the commands are run from the Docker container, follow the instructions for the Linux environment.

    • Use las instrucciones proporcionadas por GitHub para generar la clave SSH.Use the instructions provided by GitHub to generate the SSH key. A continuación, agregue la clave SSH a la cuenta de GitHub que hospeda el repositorio.Next, add the SSH key to the GitHub account that is hosting the repository.

    • Ejecute los comandos que se mencionan en el vínculo anterior en el shell de Docker para Jenkins (no en el host).Run the commands mentioned in the preceding link in the Jenkins Docker shell (and not on your host).

    • Para iniciar sesión en el shell de Jenkins desde un host, use los siguientes comandos:To sign in to the Jenkins shell from your host, use the following commands:

      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.Ensure that the cluster or machine where the Jenkins container image is hosted has a public-facing IP. De esta forma, la instancia de Jenkins puede recibir notificaciones de GitHub.Having a public-facing IP enables the Jenkins instance to receive notifications from GitHub.

Creación y configuración de trabajos de JenkinsCreate and configure a Jenkins job

  1. En primer lugar, si no tiene un repositorio que pueda usar para hospedar el proyecto Voting en GitHub, cree uno.First, if you do not have a repository that you can use to host the Voting project on GitHub, create one. El repositorio se denomina dev_test en el resto de este tutorial.The repository is called dev_test for the remaining of this tutorial.

  2. Cree un elemento nuevo en el panel de Jenkins en http://<HOST-IP>:8080.Create a new item on your Jenkins dashboard at http://<HOST-IP>:8080.

  3. Escriba un nombre para dicho elemento (por ejemplo, MyJob).Enter an item name (for example, MyJob). Seleccione free-style project (proyecto de estilo libre) y haga clic en OK (Aceptar).Select free-style project, and click OK.

  4. Vaya a la página del trabajo y haga clic en Configure (Configurar).Go the job page, and click Configure.

    a.a. En la sección general, seleccione la casilla GitHub project (Proyecto de GitHub) y especifique la dirección URL del proyecto de GitHub.In the general section, select the checkbox for GitHub project, and specify your GitHub project URL. 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).This URL hosts the Service Fabric Java application that you want to integrate with the Jenkins continuous integration, continuous deployment (CI/CD) flow (for example, https://github.com/testaccount/dev_test).

    b.b. En la sección Source Code Management (Administración del código fuente), seleccione Git.Under the Source Code Management section, select 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 ).Specify the repository URL that hosts the Service Fabric Java application that you want to integrate with the Jenkins CI/CD flow (for example, https://github.com/testaccount/dev_test.git). También puede especificar la rama que se va a compilar (por ejemplo, /master).Also, you can specify here which branch to build (for example, /master).

  5. Configure su instancia de GitHub (la que hospeda el repositorio) para que pueda comunicarse con Jenkins.Configure your GitHub (which is hosting the repository) so that it is able to talk to Jenkins. Siga estos pasos:Use the following steps:

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

    b.b. Seleccione Add Service (Agregar servicio), escriba Jenkins y seleccione el complemento Jenkins-GitHub.Select Add Service, type Jenkins, and select the Jenkins-GitHub plugin.

    c.c. Escriba la dirección URL del webhook de Jenkins (de forma predeterminada, será http://<PublicIPorFQDN>:8081/github-webhook/).Enter your Jenkins webhook URL (by default, it should be http://<PublicIPorFQDN>:8081/github-webhook/). Haga clic en Add/Update Service (Agregar o actualizar servicio).Click add/update service.

    d.d. Se enviará un evento de prueba a la instancia de Jenkins.A test event is sent to your Jenkins instance. Debería ver una marca de verificación verde junto al webhook en GitHub y el proyecto se compila.You should see a green check by the webhook in GitHub, and your project builds.

    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.Under the Build Triggers section, select which build option you want. Para este ejemplo, desea desencadenar una compilación cada vez que se produzca alguna inserción en el repositorio.For this example, you want to trigger a build whenever some push to the repository happens. Por tanto, selecciona GitHub hook trigger for GITScm polling (Desencadenador de enlace de GitHub para el sondeo de GITScm).So you select GitHub hook trigger for GITScm polling.

  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).Under the Build section, from the drop-down Add build step, select the option Invoke Gradle Script. 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.In the widget that comes open the advanced menu, specify the path to Root build script for your application. Este toma el archivo build.gradle de la ruta de acceso especificada y funciona en consecuencia.It picks up build.gradle from the path specified and works accordingly.

    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).From the Post-Build Actions drop-down, select Deploy Service Fabric Project. Aquí es preciso proporcionar los detalles del clúster donde se implementará la aplicación de Service Fabric compilada por Jenkins.Here you need to provide cluster details where the Jenkins compiled Service Fabric application would be deployed. La ruta de acceso al certificado es donde el volumen se ha montado (/ tmp/myCerts).The path to the certificate is where the volume was mounted (/tmp/myCerts).

    También puede proporcionar detalles adicionales usados para implementar la aplicación.You can also provide additional details used to deploy the application. Consulte la siguiente captura de pantalla para obtener un ejemplo de los detalles de la aplicación:See the following screenshot for an example for the application details:

    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.The cluster here could be same as the one hosting the Jenkins container application, in case you are using Service Fabric to deploy the Jenkins container image.

  9. Haga clic en Save(Guardar).Click Save.

Actualización de la aplicación existenteUpdate your existing application

  1. Actualice el título de HTML en el archivo VotingApplication/VotingWebPkg/Code/wwwroot/index.html con Service Fabric Voting Sample V2.Update the title of the HTML in the VotingApplication/VotingWebPkg/Code/wwwroot/index.html file with 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.Update the ApplicationTypeVersion and ServiceManifestVersion version to 2.0.0 in the Voting/VotingApplication/ApplicationManifest.xml file.

    <?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.Update the Version field in the ServiceManifest and the Version field in the CodePackage tag in the Voting/VotingApplication/VotingWebPkg/ServiceManifest.xml file to 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.To initialize a Jenkins job that performs an application upgrade, push your new changes to your GitHub repository.

  5. En Service Fabric Explorer, haga clic en la lista desplegable Applications (Aplicaciones).In Service Fabric Explorer, click on the Applications dropdown. Para ver el estado de la actualización, haga clic en la pestaña Upgrades in Progress (Actualizaciones en curso).To see the status of your upgrade, click on the Upgrades in Progress tab.

    Actualización en curso

  6. Si accede a http://<Host-IP>:8080, verá que la aplicación Voting funciona ahora completamente.If you access http://<Host-IP>:8080 the Voting application with full functionality is now up and running.

    Aplicación Voting local

Pasos siguientesNext steps

En este tutorial, ha aprendido a:In this tutorial, you learned how to:

  • Implementar el contenedor de Jenkins de Service Fabric en su máquinaDeploy Service Fabric Jenkins container on your machine
  • Configurar el entorno de Jenkins para la implementación en Service FabricSet up Jenkins environment for deployment to Service Fabric
  • Actualizar la aplicaciónUpgrade your application