En este artículo:
- Resumen
- Público
- Requisitos previos
- Crear una casilla de servidor en Jenkins
- Implementar la casilla de servidor de Jenkins
- Conectar Cloud Application Manager en Jenkins
- Comunicarse con soporte de Cloud Application Manager
Resumen
Para integrar y realizar implementaciones de forma continua a través de Cloud Application Manager, necesita configurar un servidor de Jenkins para que funcione con su sistema de gestión de control de fuente (SCM) y el complemento de Cloud Application Manager.
Si GitHub es su SCM, estas secciones documentan cómo integrar Jenkins, los complementos de GitHub y Cloud Application Manager.
Para instalar Jenkins con Cloud Application Manager y Git Plugins, siga los pasos que se indican en esta página para armar e implementar el servidor Jenkins a partir de una casilla. La casilla instala el servidor de código abierto Jenkins más reciente con los complementos de GitHub, las dependencias y el complemento de Cloud Application Manager.
IMPORTANTE: Dado que la casilla de servidor de Jenkins está basada en Debian, recuerde implementarla en una imagen de Debian Ubuntu Linux.
Público
Si usa Jenkins para probar e integrar continuamente cambios de código en desarrollo, lanzamiento o producción, le recomendamos usar el complemento de Jenkins para Cloud Application Manager para automatizar por completo las implementaciones sin contacto.
Requisitos previos
- Acceso a Cloud Application Manager, sitio Applications (aplicaciones).
- Acceso mediante token a la cuenta de GitHub
Crear una casilla de servidor en Jenkins
Acceda a Cloud Application Manager con su cuenta.
Siga los pasos que se indican a continuación:
1. Cree una nueva casilla
En la página Boxes (casillas), haga clic en New Box (nueva casilla) y seleccione el tipo de script. Ingrese estos datos y haga clic en Save (guardar).
2. Variables de la casilla de configuración
Vaya a la página Code (código) en esa casilla y agregue las siguientes variables para almacenar los valores de implementación del servidor Jenkins.
La siguiente tabla muestra las variables necesarias para configurar la casilla de servidor de Jenkins.
Nombre | Tipo | Descripción |
---|---|---|
GIT_REPOSITORY_URL | Texto | Proporcione su propio repositorio de Git. |
GITHUB_ACCESS_TOKEN | Texto | Sus credenciales de acceso de GitHub. |
GITHUB_PROJECT_URL | Texto | El URL de su proyecto de GitHub. |
GITHUB_USER | Texto | Su nombre de usuario de GitHub. |
HTTP | Puerto | Puerto del servidor de Jenkins para permitir el tráfico de Internet. |
Complementos | Texto | Dependencias de complementos de Jenkins separadas por un espacio. |
GITHUB_PLUGIN_CONFIG | Archivo | Complemento que activa GitHub para que realice solicitudes del tipo push/pull. |
MERGE_JOB | Archivo | Plantilla de trabajo de compilación de fusión |
Use el botón New (nuevo) para agregar una variable y complétela como se indica a continuación:
- seleccione el tipo de variable adecuado,
- rellenar el nombre de la variable en mayúsculas,
- deje su valor vacío por defecto y marque la casilla de verificación requerida. Preste atención al campo
Visibility (visibilidad) para proteger la privacidad de su variable (Public [pública], Private [privada] o Internal [interna]).
-
Proporcione su propio repositorio de Git mediante una variable de texto denominada GIT_REPOSITORY_URL.
-
Apruebe el token de acceso de GitHub en una variable de texto.
Obtenga el token de acceso de GitHub
Para ingresar, use los datos de su cuenta de GitHub. En el extremo superior derecho, seleccione la opción settings (configuraciones) en el menú de usuario. En Settings (configuraciones), vaya a Developer settings (configuraciones del desarrollador) > Personal access tokens (tokens de acceso personal) > Generate new token (generar nuevo token). Describa por qué necesita el token (por ejemplo: "CAM Jenkins Server"). "Servidor CAM Jenkins").
En Scope (alcance), seleccione repo (repositorio) y repo: status (repositorio: estado). Luego, haga clic en Generate Token (generar token). Cópielo y péguelo como se indica.
- Proporcione el URL de su proyecto de GitHub en una variable de texto denominada GITHUB_PROJECT_URL.
- Proporcione su nombre de usuario de GitHub como una variable de texto denominada GITHUB_USER.
- Abra el puerto HTTP 8080 en el servidor de Jenkins mediante una variable de puerto denominada HTTP para permitir el tráfico de Internet.
- Haga referencia a las dependencias de los complementos de Cloud Application Manager, Git y GitHub en una variable de texto denominada PLUGINS.
Ingrese este valor:
elasticbox git github
- Agregue un complemento que active GitHub para que realice solicitudes del tipo push/pull. Nombre esta variable como GITHUB_PLUGIN_CONFIG
Copie y pegue este script en un archivo de texto, guárdelo en XML y cárguelo a una variable de archivo denominada GITHUB_PLUGIN_CONFIG.
<?xml version='1.0' encoding='UTF-8'?>
<com.cloudbees.jenkins.GitHubPushTrigger_-DescriptorImpl plugin="github@1.9.1">
<manageHook>true</manageHook>
<credentials>
<com.cloudbees.jenkins.Credential>
<username>{{ GITHUB_USER }}\</username>
<apiUrl>https://api.github.com</apiUrl>
<oauthAccessToken>{{ GITHUB_ACCESS_TOKEN }}\</oauthAccessToken>
</com.cloudbees.jenkins.Credential>
</credentials>
</com.cloudbees.jenkins.GitHubPushTrigger_-DescriptorImpl>
- Agregue la plantilla de trabajo de compilación de fusión como una variable de archivo denominada MERGE_JOB.
Copie y pegue el script en un archivo de texto, guárdelo en XML y cárguelo como se indica.
<project>
<actions/>
<description/>
<keepDependencies>false</keepDependencies>
<properties>
<com.coravy.hudson.plugins.github.GithubProjectProperty plugin="github@1.9.1">
<projectUrl>{{ GITHUB_PROJECT_URL }}\</projectUrl>
</com.coravy.hudson.plugins.github.GithubProjectProperty>
</properties>
<scm class="hudson.plugins.git.GitSCM" plugin="git@2.2.7">
<configVersion>2</configVersion>
<userRemoteConfigs>
<hudson.plugins.git.UserRemoteConfig>
<name>origin</name>
<refspec>+refs/heads/*:refs/remotes/origin/*</refspec>
<url>{{ GIT_REPOSITORY_URL }}\</url>
</hudson.plugins.git.UserRemoteConfig>
</userRemoteConfigs>
<branches>
<hudson.plugins.git.BranchSpec>
<name>master</name>
</hudson.plugins.git.BranchSpec>
</branches>
<doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
<submoduleCfg class="list"/>
<extensions/>
</scm>
<canRoam>true</canRoam>
<disabled>true</disabled>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers>
<com.cloudbees.jenkins.GitHubPushTrigger plugin="github@1.9.1">
<spec/>
</com.cloudbees.jenkins.GitHubPushTrigger>
</triggers>
<concurrentBuild>false</concurrentBuild>
<builders/>
<publishers/>
<buildWrappers/>
</project>
- Agregue la plantilla de trabajo de solicitud pull como una variable de archivo denominada PULL_REQUEST_JOB.
Copie y pegue el script en un archivo de texto, guárdelo en XML y cárguelo como se indica.
<project>
<actions/>
<description/>
<keepDependencies>false</keepDependencies>
<properties>
<com.coravy.hudson.plugins.github.GithubProjectProperty plugin="github@1.9.1">
<projectUrl>{{ GITHUB_PROJECT_URL }}\</projectUrl>
</com.coravy.hudson.plugins.github.GithubProjectProperty>
</properties>
<scm class="hudson.plugins.git.GitSCM" plugin="git@2.2.7">
<configVersion>2</configVersion>
<userRemoteConfigs>
<hudson.plugins.git.UserRemoteConfig>
<name>origin</name>
<refspec>+refs/pull/*:refs/remotes/origin/pr/*</refspec>
<url>{{ GIT_REPOSITORY_URL }}\</url>
</hudson.plugins.git.UserRemoteConfig>
</userRemoteConfigs>
<branches>
<hudson.plugins.git.BranchSpec>
<name>${PR_COMMIT}</name>
</hudson.plugins.git.BranchSpec>
</branches>
<doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
<submoduleCfg class="list"/>
<extensions/>
</scm>
<canRoam>true</canRoam>
<disabled>true</disabled>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers>
<com.elasticbox.jenkins.triggers.PullRequestBuildTrigger plugin="elasticbox@0.9.7">
<spec></spec>
<triggerPhrase>.*test\W+this\W+please.*</triggerPhrase>
<whitelist></whitelist>
</com.elasticbox.jenkins.triggers.PullRequestBuildTrigger>
</triggers>
<concurrentBuild>false</concurrentBuild>
<builders/>
<publishers>
<com.cloudbees.jenkins.GitHubCommitNotifier plugin="github@1.9.1"/>
</publishers>
<buildWrappers/>
</project>
3. Agregue los siguientes eventos para instalar el servidor de Jenkins y los complementos.
evento pre_instalación
Instale Jenkins. Copie y pegue el script en el evento configure, y haga clic en Save (guardar).
#/bin/bash
# For certain images In some clouds like GCE, packages are being installed by the provider at this point, so we need to wait for the installation to finish
WAIT_SECONDS=0
while [[ -f /var/lib/apt/lists/lock && ${WAIT_SECONDS} -lt 180 ]]
do
sleep 5
WAIT_SECONDS=$(( WAIT_SECONDS + 5 ))
done
# Install Jenkins and Git
curl -ks https://jenkins-ci.org/debian-stable/jenkins-ci.org.key | apt-key -y add -
echo deb http://pkg.jenkins-ci.org/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list
apt-get install default-jre -y
apt-get -y update
apt-get -y --allow-unauthenticated install jenkins git
configurar evento
Instale los complementos y las plantillas del build job, y configure los complementos de GitHub con nombre de usuario, token de acceso y URL del repositorio. Copie y pegue el script en el evento configure, y haga clic en Save (guardar).
#!/bin/bash
set -e
function install_template() {
SOURCE_URL=${1}
DESTINATION_PATH=${2}
curl -ks ${SOURCE_URL} -o ${DESTINATION_PATH}
elasticbox config -i ${DESTINATION_PATH} -o ${DESTINATION_PATH}
chown jenkins:jenkins ${DESTINATION_PATH}
}
JENKINS_HOME=~jenkins
# Install plugins specified in variable PLUGINS
PLUGINS="{{ PLUGINS }}\"
if [ -n "${PLUGINS}" ]
then
# Get the latest plugin info for update center
mkdir -p ${JENKINS_HOME}/updates
curl -Ls http://updates.jenkins-ci.org/update-center.json | sed '1d;$d' > ${JENKINS_HOME}/updates/default.json
chown -R jenkins:jenkins ${JENKINS_HOME}/updates
# Restart Jenkins and wait for it to be up
service jenkins restart
sleep 30
for PLUGIN_NAME in ${PLUGINS}
do
echo Installing plugin ${PLUGIN_NAME}
java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -s http://127.0.0.1:8080/ install-plugin ${PLUGIN_NAME}
echo Installed plugin ${PLUGIN_NAME}
done
fi
# Configure GitHub plugin with GitHub user ID and access token specified in the variable GITHUB_USER and GITHUB_ACCESS_TOKEN
install_template {{ GITHUB_PLUGIN_CONFIG }}\ ${JENKINS_HOME}/com.cloudbees.jenkins.GitHubPushTrigger.xml
# Install CI/CD job templates
mkdir -p ${JENKINS_HOME}/jobs/pull-request
install_template {{ PULL_REQUEST_JOB }}\ ${JENKINS_HOME}/jobs/pull-request/config.xml
mkdir ${JENKINS_HOME}/jobs/merge
install_template {{ MERGE_JOB }}\ ${JENKINS_HOME}/jobs/merge/config.xml
chown -R jenkins:jenkins ${JENKINS_HOME}/jobs
# Restart Jenkins server
service jenkins restart
Implementar la casilla de servidor de Jenkins
Seleccione una imagen de Debian Ubuntu Linux al implementar la casilla del servidor de Jenkins. Puede realizar el lanzamiento en cualquier proveedor de nube público o privado, o en su propia infraestructura. Aquí lo implementamos en Google Cloud.
Antes de empezar
Configure su red de proveedor en la nube para permitir el tráfico de Internet hacia el servidor de Jenkins. Haga que la dirección IP de la instancia sea pública y configure el puerto del firewall en 8080. Además, abra otro puerto para permitir que los esclavos de Jenkins se comuniquen con el servidor. Asigne a este puerto el número que desee.
Aquí configuramos la red de Google Cloud para permitir el tráfico de Internet a través del puerto 8080 y el tráfico de esclavos de Jenkins a través del puerto 55555.
-
Ingrese a la consola de Google Cloud.
-
Seleccione el proyecto asociado con su cuenta de proveedor de Google en Cloud Application Manager.
-
Amplíe Compute > Compute Engine > Networks (redes). Seleccione la red predeterminada. En Firewall rules (reglas de firewall), haga clic en Create new (crear nueva).
-
Ingrese los datos como se indica para abrir los puertos 8080 y 55555. Tenga en cuenta que Cloud Application Manager usa la etiqueta objetivo para detectar la regla del firewall.
-
Sincronice su cuenta de proveedor en Cloud Application Manager para obtener la regla.
Pasos para implementar el servidor de Jenkins
-
Ingrese a Cloud Application Manager.
-
Cree una nueva casilla para políticas de implementación. Boxes (casillas) > New (nueva) > Deployment Policy (política de implementación) y seleccione Virtual or Physical Machine (máquina virtual o física).
-
Seleccione Google Compute como proveedor. Asigne un nombre a la casilla y haga clic en Save (guardar).
-
Vaya a la nueva casilla para políticas de implementación y modifíquela.
-
En la política, seleccione una imagen de Debian Ubuntu Linux. Aunque el tipo de máquina g1.small le servirá, seleccione n1-standard-2 para realizar una implementación más rápida.
-
Bajo red, seleccione la regla de cortafuegos de Google nube. Seleccionar IP ephemeral para hacer públicos la dirección IP de instancia.
-
Haga clic en Save (guardar) para guardar los cambios.
-
Vaya a la casilla del servidor de Jenkins que estableció.
-
En su página de casillas, haga clic en Deploy (implementar).
-
En este diálogo de la instancia, nombre la implementación y seleccione la nueva casilla para políticas de implementación.
-
Verifique las variables de implementación del servidor Jenkins como el URL del repositorio, el token de acceso, el URL del proyecto y el nombre de usuario de GitHub.
-
Haga clic en Deploy (implementar) para lanzar el servidor Jenkins.
Cuando esté en línea, en la página de instancias dentro de Endpoints (puntos de conexión), haga clic en la dirección IP pública para abrir el portal de gestión del servidor Jenkins. Puede ver que el servidor tiene todos los complementos de GitHub y las plantillas del trabajo de compilación.
Conectar Cloud Application Manager en Jenkins
En la interfaz de gestión de su servidor Jenkins, siga estos pasos para registrar su cuenta de Cloud Application Manager.
Nota: Configure el URL del servidor Jenkins para hacer que los enlaces del servidor Jenkins funcionen en los mensajes publicados automáticamente en las solicitudes pull de GitHub. Vaya a Manage Jenkins (gestionar jenkins) > Configure System (configurar sistema). Dentro de Jenkins URL (URL de Jenkins), establezca el URL y haga clic en Save (guardar).
Pasos
-
Dentro de Jenkins > Manage Jenkins (gestionar Jenkins) > Configure System (configurar sistema) > Cloud (nube), haga clic en Add a new cloud (agregar una nueva nube) y seleccione Cloud Application Manager. Ingrese los datos como se indica:
Nombre Descripción Descripción Introduzca la información para identificar su cuenta de administrador de aplicaciones nube en los trabajos de Jenkins. URL de terminal Introduzca una URL personalizada si utiliza el administrador de aplicaciones como dispositivo. Máx. N.º de instancias Este es el número total de casos que Jenkins lanzará a través de su cuenta. Recomendamos al menos 0. Token de autenticación Obtenga un token y péguelo aquí. Si usa un nombre de usuario y contraseña para acceder a Cloud Application Manager, obténgalos al hacer clic en Get Authentication Token (obtener token de autenticación). -
Haga clic en Verify Authentication Token (verificar token de autenticación) para ver si Jenkins puede conectarse a Cloud Application Manager.
-
Cuando haya terminado, haga clic en Save (guardar).
Comunicarse con soporte de Cloud Application Manager
Lamentamos que esté teniendo problemas en el Gestor de aplicaciones en la nube. Revise los consejos para solucionar problemas o comuníquese con soporte de Cloud Application Manager para proporcionar detalles y capturas de pantalla de ser posible.
Para problemas relacionados con las llamadas API, envíe el cuerpo de la solicitud junto con los detalles del problema.
En el caso de error de casilla, comparta la casilla en el espacio de trabajo en el que su organización y Cloud Application Manager pueden ingresar y adjunte los registros.
- Linux: SSH y busque el registro en /var/log/elasticbox/elasticbox-agent.log
- Windows: Windows: RDP dentro de la instancia para ubicar el registro en ProgramData/ElasticBox/Logs/elasticbox-agent.log