IGOR est un service qui fournit un seul point d'intégration avec des services d'intégration continue (CI) et de gestion de contrôle des sources (SCM) pour Spinnaker.
Igor gère un certain nombre de poters qui partagent tous la même architecture commune. À un niveau élevé, ils tous:
Caractéristiques:
HealthIndicator qui signale si aucun polleur ne Down ou s'ils n'ont pas eu de cycle de sondage réussi depuis longtemps/admin/pollers/fastforward/{monitorName}[?partition={partition}] . Fastwarding signifie que tous les états de cache en instance seront interrogés et sauvés, mais n'enverront pas de notifications Echo.Propriétés pertinentes:
| Propriété | Valeur par défaut | Description |
|---|---|---|
spinnaker.build.pollingEnabled | vrai | Définit si le mécanisme d'interrogation du système de construction est activé ou non. La désactivation de cela désactivera efficacement toute intégration avec un système de construction qui dépend de l'Igor le sonder. |
spinnaker.build.pollInterval | 60 | Intervalle en secondes entre les cycles de vote |
spinnaker.pollingSafeguard.itemUpperThreshold | 1000 | Définit le seuil supérieur pour le nombre de nouveaux éléments avant qu'un cycle de mise à jour du cache ne soit rejeté |
locking.enabled | false | Permet le verrouillage distribué pour qu'Igor puisse fonctionner sur plusieurs nœuds sans interférence |
Métriques pertinentes:
| Métrique | Taper | Description |
|---|---|---|
pollingMonitor.newItems | jauge | représente le nombre de nouveaux articles mis en cache par un moniteur donné pendant un cycle de sondage |
pollingMonitor.itemsOverThreshold | jauge | 0 Si deltasize <seuil, deltasize autrement |
pollingMonitor.pollTiming | minuteur | Publié pour chaque cycle de sondage avec la durée qu'il a fallu pour terminer |
pollingMonitor.failed | comptoir | un contre-contre-contre indiquant un cycle de sondage échoué |
Toutes ces mesures peuvent être regroupées par une étiquette monitor (par exemple, DockerMonitor , JenkinsMonitor ...) pour retrouver les problèmes.
Les backends de stockage suivants sont pris en charge:
Propriétés pertinentes:
redis:
enabled: true
connection: redis://host:port
Les services SCM suivants sont pris en charge:
Commit Controller Classes Expose API pour récupérer des listes de validations, telles que /github/{{projectKey}}/{{repositorySlug}}/compareCommits?from={{fromHash}}&to={{toHash}}
À l'heure actuelle, Igor expose uniquement les API lues, il n'y a pas de polleurs ni de déclencheurs impliquant directement les services SCM.
Propriétés pertinentes:
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
Les services CI suivants sont pris en charge:
Pour chacun de ces services, un poller peut être activé (par exemple avec jenkins.enabled ) qui commencera à surveiller les nouvelles versions / pipelines / artefacts, les mettant en cache et soumettant des événements à Echo, soutenant ainsi les déclencheurs du pipeline. Le GCB est un peu différent en ce qu'il ne sonde pas et nécessite la mise en place d'abonnements PubSub.
La classe BuildController expose également des API pour les services qui les soutiennent tels que:
Ces API sont utilisées pour fournir des informations d'artefacts pour les stades de cuisson.
Dans votre bloc de configuration (dans igor.yml, igor-local.yml, spinnaker.yml ou spinnaker-local.yml), vous pouvez définir plusieurs blocs de maîtres en utilisant le format de liste.
Vous pouvez obtenir un jeton API Jenkins en naviguant vers http://your.jenkins.server/me/configure (où me suis votre nom d'utilisateur).
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
Dans votre bloc de configuration (dans igor.yml, igor-local.yml, spinnaker.yml ou spinnaker-local.yml), vous pouvez définir plusieurs blocs de maîtres en utilisant le format de liste.
Pour authentifier avec Travis, vous utilisez un "jeton d'accès personnel" sur un utilisateur GIT avec autorisation read:org, repo, user . Ceci s'ajoute dans settings -> Personal access tokens sur 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))/
Lorsque l'analyse des informations d'artefacts de Travis Builds, Igor utilise un regex par défaut qui correspondra à la sortie de l'outil jfrog rt / art CLI. Différents regexxes de la valeur par défaut peuvent être configurés à l'aide de la liste regexes .
Dans votre bloc de configuration (dans igor.yml, igor-local.yml, spinnaker.yml ou spinnaker-local.yml), vous pouvez définir plusieurs blocs de maîtres en utilisant le format de liste.
Pour authentifier avec GitLab CI, utilisez un jeton d'accès personnel avec des autorisations 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
Les propriétés de construction sont automatiquement lues à partir de pipelines GitLab CI réussis en utilisant le modèle SPINNAKER_PROPERTY_*=value . Par exemple, un journal contenant une ligne SPINNAKER_PROPERTY_HELLO=world créera un élément de propriété de construction hello=world . Les artefacts Gitlab CI ne sont pas encore pris en charge.
CloudDriver peut être configuré pour interroger vos registres. Lorsque c'est le cas, Igor peut alors créer un poller qui répertorie les registres indexés par CloudDriver, vérifiez chacun des nouvelles images et soumettra des événements à Echo (permettant donc les déclencheurs Docker))
Propriétés pertinentes:
dockerRegistry.enabledservices.clouddriver.baseUrl à configurerIgor exige que Redis Server soit opérationnel.
Démarrez Igor via ./gradlew bootRun . Ou en suivant les instructions à l'aide des scripts d'installation de Spinnaker.
Pour démarrer le JVM en mode de débogage, définissez la propriété Java System DEBUG=true :
./gradlew -DDEBUG=true
Le JVM écoutera ensuite un débogueur à attacher sur le port 8188. Le JVM n'attendra pas que le débogueur soit attaché avant de démarrer Igor; Les arguments JVM pertinents peuvent être vus et modifiés selon les besoins dans build.gradle .