IGOR es un servicio que proporciona un único punto de integración con servicios de integración continua (CI) y gestión de control de fuente (SCM) para Spinnaker.
Igor ejecuta varios polladores que comparten la misma arquitectura común. En un alto nivel, todos:
Características:
HealthIndicator
que Down
si no se están ejecutando pollers o si no han tenido un ciclo de votación exitoso en mucho tiempo/admin/pollers/fastforward/{monitorName}[?partition={partition}]
. El avance rápido significa que todo el estado de caché pendiente será encuestado y guardado, pero no enviará notificaciones de eco.Propiedades relevantes:
Propiedad | Valor predeterminado | Descripción |
---|---|---|
spinnaker.build.pollingEnabled | verdadero | Define si el mecanismo de votación del sistema de compilación está habilitado o no. Deshabilitar esto desactivará efectivamente cualquier integración con un sistema de compilación que dependa de la encuesta Igor. |
spinnaker.build.pollInterval | 60 | Intervalo en segundos entre ciclos de votación |
spinnaker.pollingSafeguard.itemUpperThreshold | 1000 | Define el umbral superior para el número de elementos nuevos antes de que se rechace un ciclo de actualización de caché |
locking.enabled | false | Habilita el bloqueo distribuido para que Igor pueda ejecutarse en múltiples nodos sin interferencia |
Métricas relevantes:
Métrico | Tipo | Descripción |
---|---|---|
pollingMonitor.newItems | indicador | representa el número de nuevos elementos almacenados en caché por un monitor dado durante un ciclo de votación |
pollingMonitor.itemsOverThreshold | indicador | 0 Si deltasa <umbral, deltasa de otra manera |
pollingMonitor.pollTiming | minutero | publicado para cada ciclo de votación con la duración que se necesitó para completar |
pollingMonitor.failed | encimera | Un contador de errores que indica un ciclo de votación fallido |
Todas estas métricas se pueden agrupar mediante una etiqueta monitor
(por ejemplo, DockerMonitor
, JenkinsMonitor
...) para rastrear los problemas.
Se admiten los siguientes backends de almacenamiento:
Propiedades relevantes:
redis:
enabled: true
connection: redis://host:port
Se admiten los siguientes servicios SCM:
Las clases de controlador Commit
exponen las API para recuperar listas de confirmaciones, como /github/{{projectKey}}/{{repositorySlug}}/compareCommits?from={{fromHash}}&to={{toHash}}
Por el momento, Igor solo expone las API de lectura, no hay polladores ni desencadenantes que involucren servicios SCM directamente.
Propiedades relevantes:
github:
baseUrl: "https://api.github.com"
accessToken: '<your github token>'
commitDisplayLength: 8
stash:
baseUrl: "<stash url>"
username: '<stash username>'
password: '<stash password>'
bitbucket:
baseUrl: "https://api.bitbucket.org"
username: '<bitbucket username>'
password: '<bitbucket password>'
commitDisplayLength: 7
gitlab:
baseUrl: "https://gitlab.com"
privateToken: '<your gitlab token>'
commitDisplayLength: 8
Se admiten los siguientes servicios de CI:
Para cada uno de estos servicios, se puede habilitar un pollador (por ejemplo, con jenkins.enabled
. GCB es un poco diferente en que no encuesta y requiere la configuración de suscripciones de pubSub.
La clase BuildController
también expone API para los servicios que los respaldan, como:
Estas API se utilizan para proporcionar información de artefactos para las etapas de horneado.
En su bloque de configuración (ya sea en Igor.yml, Igor-Local.yml, Spinnaker.yml o Spinnaker-Local.yml), puede definir múltiples bloques de maestros utilizando el formato de lista.
Puede obtener un token de la API Jenkins navegando a http://your.jenkins.server/me/configure
(donde me
es su nombre de usuario).
jenkins:
enabled: true
masters:
-
address: "https://spinnaker.cloudbees.com/"
name: cloudbees
password: f5e182594586b86687319aa5780ebcc5
username: spinnakeruser
-
address: "http://hostedjenkins.amazon.com"
name: bluespar
password: de4f277c81fb2b7033065509ddf31cd3
username: spindoctor
En su bloque de configuración (ya sea en Igor.yml, Igor-Local.yml, Spinnaker.yml o Spinnaker-Local.yml), puede definir múltiples bloques de maestros utilizando el formato de lista.
Para autenticarse con Travis, utiliza un "token de acceso personal" en un usuario de GIT con permisos read:org, repo, user
. Esto se agrega en settings -> Personal access tokens
en GitHub/GitHub -Enterprise.
travis:
enabled: true
# Travis names are prefixed with travis- inside igor.
masters:
- name: ci # This will show as travis-ci inside spinnaker.
baseUrl: https://travis-ci.com
address: https://api.travis-ci.com
githubToken: 6a7729bdba8c4f9abc58b175213d83f072d1d832
regexes:
- /Upload https?://.+/(.+.(deb|rpm))/
Al analizar la información de artefactos de Travis, Igor utiliza una regex predeterminada que coincidirá con la salida de la herramienta jfrog rt
/ art
CLI. Diferentes regexos que el predeterminado se pueden configurar utilizando la lista regexes
.
En su bloque de configuración (ya sea en Igor.yml, Igor-Local.yml, Spinnaker.yml o Spinnaker-Local.yml), puede definir múltiples bloques de maestros utilizando el formato de lista.
Para autenticarse con GitLab CI, use un token de acceso personal con permisos read_api
.
gitlab-ci:
enabled: true
itemUpperThreshold: 1000 # Optional, default 1000. Determines max new pipeline count before a cache cycle is rejected
masters:
- address: "https://git.mycompany.com"
name: mygitlab
privateToken: kjsdf023ofku209823
# Optional:
defaultHttpPageLength: 100 # defaults 100, page length when querying paginated Gitlab API endpoints (100 is max per Gitlab docs)
limitByOwnership: false # defaults false, limits API results to projects/groups owned by the token creator
limitByMembership: true # defaults true, limits API results to projects/groups the token creator is a member in
httpRetryMaxAttempts: 5 # defaults 5, # default max number of retries when hitting Gitlab APIs and errors occur
httpRetryWaitSeconds: 2 # defaults 2, # of seconds to wait between retries
httpRetryExponentialBackoff: false # deafults false, if true retries to Gitlab will increase exponentially using the httpRetryWaitSeconds option's value
Las propiedades de compilación se leen automáticamente de las tuberías GitLab CI exitosas utilizando el patrón SPINNAKER_PROPERTY_*=value
. Por ejemplo, un registro que contiene una línea SPINNAKER_PROPERTY_HELLO=world
creará un elemento de propiedad de compilación hello=world
. Los artefactos Gitlab CI aún no son compatibles.
CloudDriver se puede configurar para sondear sus registros. Cuando ese es el caso, Igor puede crear un pollador que enumere los registros indexados por CloudDriver, verifique cada una de las nuevas imágenes y envíe eventos a Echo (por lo tanto, permiten los desencadenantes de Docker)
Propiedades relevantes:
dockerRegistry.enabled
services.clouddriver.baseUrl
para configurarIgor requiere que Redis Server esté en funcionamiento.
Comience Igor a través de ./gradlew bootRun
. O siguiendo las instrucciones utilizando los scripts de instalación de Spinnaker.
Para iniciar el JVM en modo de depuración, establezca la propiedad del sistema Java DEBUG=true
:
./gradlew -DDEBUG=true
El JVM luego escuchará a un depurador que se adjuntará en el puerto 8188. El JVM no esperará a que se adjunte el depurador antes de comenzar Igor; Los argumentos JVM relevantes se pueden ver y modificar según sea necesario en build.gradle
.