Puedes iniciar compilaciones automáticas con activadores de Jenkins y webhooks de Secure Source Manager.
Roles obligatorios
Para obtener los permisos que necesitas para crear activadores de compilación de Jenkins, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:
-
Administrador de repositorio de Secure Source Manager (
roles/securesourcemanager.repoAdmin
) en tu repositorio -
Accessor de instancia de Secure Source Manager (
roles/securesourcemanager.instanceAccessor
) en la instancia de Secure Source Manager
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Para obtener información sobre cómo conceder roles de Secure Source Manager, consulta los artículos Control de acceso con gestión de identidades y accesos y Conceder acceso a instancias a los usuarios.
Configurar un activador de webhook
Jenkins usa complementos de activadores de compilación para habilitar la automatización de CI/CD. Puedes configurar activadores para que detecten eventos entrantes, como cuando se envía una nueva confirmación a un repositorio o cuando se inicia una solicitud de extracción, y, a continuación, ejecutar automáticamente una compilación cuando se produzcan nuevos eventos. También puedes configurar activadores para compilar el código a partir de cualquier cambio en el repositorio de origen o solo a partir de los cambios que cumplan con ciertos criterios.
Para configurar un activador de webhook genérico de Jenkins, haz lo siguiente:
Instala los complementos Git Plugin, SSH Credential Plugin y Generic Webhook Trigger Plugin en tu servidor de Jenkins.
Genera un par de claves SSH válido en tu servidor de Jenkins. Secure Source Manager solo admite claves de tipo RSA.
Añade el dominio de la instancia de Secure Source Manager al archivo SSH
known_hosts
del servidor de Jenkins ejecutando el siguiente comando:ssh -t git@INSTANCE_ID-INSTANCE_PROJECT_NUMBER-ssh.us-central1.sourcemanager.dev
Donde:
- INSTANCE_ID es el nombre de tu instancia de Secure Source Manager.
- INSTANCE_PROJECT_NUMBER es el número de proyecto de tu instancia de Secure Source Manager. Consulta el artículo Identificar proyectos para saber dónde encontrar el número de proyecto.
Por ejemplo, el siguiente comando añade el dominio de instancia de una instancia llamada
prod-test-instance
con el número de proyecto123456789
.ssh -t git@prod-test-instance-123456789-ssh.us-central1.sourcemanager.dev
Responde
yes
para añadir el dominio de la instancia a la lista de hosts conocidos.En la página Manage Credentials (Gestionar credenciales) de Jenkins:
- Selecciona Nombre de usuario SSH con clave privada.
- Pega la clave privada SSH de tu servidor de Jenkins.
- En el menú desplegable Tipo, rellena los demás campos según sea necesario.
Haz clic en Crear.
En la interfaz web de Jenkins, crea un trabajo de Jenkins.
En la página de configuración del trabajo de Jenkins, en la sección Gestión de código fuente, selecciona Git.
En la sección Git, pega la URL SSH del repositorio de Secure Source Manager como URL del repositorio, introduce tus ramas de compilación (por ejemplo,
*/main
) y, a continuación, selecciona la credencial de clave SSH privada guardada que has añadido anteriormente en la página Gestionar credenciales.En la sección Crear activadores, selecciona Activador de webhook genérico.
De forma opcional, puede añadir un token para que el trabajo solo se active si se proporciona ese token al invocarlo. Para añadir un token, en la sección Activador de webhook genérico, puedes introducir un token en el campo Token.
En la sección Build (Compilación), proporciona una secuencia de comandos de compilación que quieras usar para este trabajo de Jenkins. Por ejemplo, puedes ejecutar
cat README.md
para imprimir el contenido de README.md.Haz clic en Guardar para crear el trabajo de Jenkins.
Configurar una cuenta de servicio y conceder los permisos necesarios
Si aún no tienes una cuenta de servicio que quieras usar, crea una.
Asegúrate de que tienes el permiso
iam.serviceAccounts.actAs
en la cuenta de servicio. Este permiso forma parte del rol Usuario de cuenta de servicio (roles/iam.serviceAccountUser
).En la interfaz web de Secure Source Manager, haz clic en el menú
más opciones.Haz clic en Claves SSH de cuenta de servicio. Se abrirá la página Claves SSH de cuenta de servicio y se mostrará una lista de las claves que hayas añadido.
Haz clic en Añadir clave.
En la página Añadir clave SSH, introduce los siguientes valores de tu clave:
Cuenta de servicio: el correo de la cuenta de servicio que quieras usar con la clave SSH en el formato
SA_NAME@PROJECT_ID.iam.gserviceaccount.com
Dónde
SA_NAME
es el nombre de la cuenta de servicio.PROJECT_ID
es el ID del proyecto en el que se ha creado la cuenta de servicio.
Clave pública SSH: tu clave pública SSH de Jenkins.
Conceder permisos al agente de servicio de Secure Source Manager
Si la cuenta de servicio no está en el mismo proyecto que tu instancia de Secure Source Manager, también debes conceder el rol Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator
) o el permiso iam.serviceAccounts.signJwt
al agente de servicio de Secure Source Manager.
Si tu cuenta de servicio está en el mismo proyecto que tu instancia de Secure Source Manager, ve a la sección Conceder un rol de repositorio a la cuenta de servicio.
Ejecuta el siguiente comando para obtener la política de IAM de tu cuenta de servicio:
gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT \ --format json
Donde SERVICE_ACCOUNT es la cuenta de servicio que quieres usar. La cuenta debe tener el formato de un ID de cuenta de servicio numérico o de una dirección de correo electrónico, como
123456789876543212345
omy-iam-account@somedomain.com
.La salida incluye los enlaces que ya existan o, si no hay ninguno, el valor
etag
similar al siguiente: .{ "etag": "BwUjHYKJUiQ=" }
Copia el resultado en un archivo nuevo llamado
policy.json
.Para asignar el rol Creador de tokens de cuenta de servicio (
roles/iam.ServiceAccountTokenCreator
) al agente de servicio de Secure Source Manager, modifica elpolicy.json
para añadir lo siguiente:{ "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:service-INSTANCE_PROJECT_NUMBER@gcp-sa-sourcemanager.iam.gserviceaccount.com" ] }
Donde
INSTANCE_PROJECT_NUMBER
es el número de proyecto de tu instancia de Secure Source Manager.Ejecuta el siguiente comando para sustituir la política de IAM de la cuenta de servicio:
gcloud iam service-accounts set-iam-policy SERVICE_ACCOUNT POLICY_FILE
Haz los cambios siguientes:
- SERVICE_ACCOUNT con el ID o el correo de la cuenta de servicio.
- POLICY_FILE con la ubicación y el nombre del archivo con formato JSON que incluye la nueva política.
Asigna un rol de repositorio a la cuenta de servicio
- En la interfaz web de Secure Source Manager, vaya al repositorio en el que quiera dar permisos a la cuenta de servicio.
- Haz clic en la pestaña Permisos.
- Haz clic en Añadir usuarios.
- En el campo Añadir principal, introduce la dirección de correo de la cuenta de servicio.
- En el menú desplegable Rol, selecciona Lector de repositorio de Secure Source Manager.
Asigna el rol
securesourcemanager.instanceAccessor
a la cuenta de servicio ejecutando el siguiente comando:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SA_EMAIL \ --role=roles/securesourcemanager.instanceAccessor
Haz los cambios siguientes:
PROJECT_ID
con el ID del proyecto de la instancia de Secure Source Manager.SA_EMAIL
con el correo de la cuenta de servicio.
Configurar un webhook
- En la interfaz web de Gestor de fuentes seguras, vaya al repositorio para el que quiera crear un webhook.
- Haz clic en Settings (Configuración).
- Haz clic en Webhooks y, a continuación, en Add webhook (Añadir webhook).
En el campo ID de gancho, introduce un ID para el webhook.
En el campo URL de destino, introduce la URL de activación de Jenkins.
Si has usado el token opcional al configurar el activador de Jenkins, la URL del activador de Jenkins contendrá ese token al final. Para evitar que se filtre el token, quítalo del final de la URL de destino y cópialo en el campo Cadena de consulta sensible.
Para encontrar tu token en la URL del activador, busca el texto que empieza por
token=
Por ejemplo, si tu URL es similar a la siguiente:
https://jenkins-server.com/generic-webhook-trigger/invoke?token=jenkins-job1
Copia y elimina la parte que empieza por el signo de interrogación
?token=jenkins-job1
del campo URL de destino. A continuación, elimina el signo de interrogación inicial y mueve la parte restantetoken=jenkins-job1
al campo Cadena de consulta sensible.En la sección Activar con, seleccione una de las siguientes opciones:
- Push: se activa cuando se inserta contenido en el repositorio.
- Estado de solicitud de extracción cambiado: se activa cuando cambia el estado de una solicitud de extracción.
Si ha seleccionado Push, puede introducir una lista de permitidos para los eventos push en el campo Filtro de rama.
El campo Filtro de rama usa el patrón glob y solo las operaciones en las ramas coincidentes activarán una compilación. Si el campo está vacío o es
*
, se registran los eventos push de todas las ramas.Haz clic en Añadir webhook.
El webhook se muestra en la página Webhooks (Webhooks).
Probar el webhook
- En la página Webhooks (Webhooks) de Secure Source Manager, haga clic en el webhook que quiera probar.
Ve a la parte inferior de la página y haz clic en Probar publicación.
Se añade un evento falso a la cola de entrega. Puede tardar unos segundos en aparecer en el historial de envíos.
También puedes usar un comando
git
para enviar o combinar una solicitud de extracción para probar el webhook.En el proyecto de Jenkins, consulte la compilación activada por el evento de prueba en Historial de compilaciones.
También puedes ver la solicitud y la respuesta de la entrega de prueba en la sección Entregas recientes de la página del webhook de Gestor de Fuentes Seguras después de enviar tu primera entrega de prueba.
Siguientes pasos
- Consulta la documentación de Jenkins.