O Igor é um serviço que fornece um único ponto de integração com integração contínua (IC) e serviços de gerenciamento de controle de origem (SCM) para Spinnaker.
O Igor administra vários pesquisadores que compartilham a mesma arquitetura comum. Em um nível alto, todos eles:
Características:
HealthIndicator que se Down se não houver pesquisadores ou se não tiveram um ciclo de votação bem -sucedido há muito tempo/admin/pollers/fastforward/{monitorName}[?partition={partition}] . O avanço rápido significa que todo o estado de cache pendente será pesquisado e salvo, mas não enviará notificações de eco.Propriedades relevantes:
| Propriedade | Valor padrão | Descrição |
|---|---|---|
spinnaker.build.pollingEnabled | verdadeiro | Define se o mecanismo de pesquisa do sistema de construção está ou não ativado. Desativar isso desativará efetivamente qualquer integração com um sistema de construção que depende da pesquisa de igor. |
spinnaker.build.pollInterval | 60 | Intervalo em segundos entre os ciclos de votação |
spinnaker.pollingSafeguard.itemUpperThreshold | 1000 | Define o limite superior para o número de novos itens antes que um ciclo de atualização de cache seja rejeitado |
locking.enabled | false | Ativa o bloqueio distribuído para que o Igor possa funcionar em vários nós sem interferência |
Métricas relevantes:
| Métrica | Tipo | Descrição |
|---|---|---|
pollingMonitor.newItems | medidor | representa o número de novos itens em cache por um determinado monitor durante um ciclo de votação |
pollingMonitor.itemsOverThreshold | medidor | 0 se deltasize <limiar, deltase |
pollingMonitor.pollTiming | Timer | publicado para cada ciclo de pesquisa com a duração necessária para concluir |
pollingMonitor.failed | contador | um contador de erros indicando um ciclo de votação com falha |
Todas essas métricas podem ser agrupadas por uma etiqueta monitor (por exemplo, DockerMonitor , JenkinsMonitor ...) para rastrear problemas.
Os seguintes backnds de armazenamento são suportados:
Propriedades relevantes:
redis:
enabled: true
connection: redis://host:port
Os seguintes serviços SCM são suportados:
As classes de controlador Commit expõem as APIs a recuperar listas de começos, como /github/{{projectKey}}/{{repositorySlug}}/compareCommits?from={{fromHash}}&to={{toHash}}
No momento, o Igor expõe apenas APIs de leitura, não há pesquisadores nem gatilhos envolvendo serviços de SCM diretamente.
Propriedades 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
Os seguintes serviços de IC são suportados:
Para cada um desses serviços, um pesquisador pode ser ativado (por exemplo, com jenkins.enabled ) que começará a monitorar novas compilações/pipelines/artefatos, armazená -los em cache e enviando eventos ao Echo, apoiando assim os gatilhos do pipeline. O GCB é um pouco diferente, pois não pesquisou e requer a criação de assinaturas de pubsub.
A classe BuildController também expõe APIs para serviços que os apoiam, como:
Essas APIs são usadas para fornecer informações de artefatos para estágios de bolos.
No seu bloco de configuração (em igor.yml, igor-cal.yml, spinnaker.yml ou spinnaker-cal.yml), você pode definir vários blocos de Masters usando o formato da lista.
Você pode obter um token da API da Jenkins navegando para http://your.jenkins.server/me/configure (onde me é seu nome de usuário).
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
No seu bloco de configuração (em igor.yml, igor-cal.yml, spinnaker.yml ou spinnaker-cal.yml), você pode definir vários blocos de Masters usando o formato da lista.
Para autenticar com o Travis, você usa um "token de acesso pessoal" em um usuário Git com permissões, read:org, repo, user . Isso é adicionado nas settings -> Personal access tokens no 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))/
Ao analisar informações de artefatos da Travis Builds, o iGor usa um regex padrão que corresponderá à saída da ferramenta jfrog rt / art CLI. Regexes diferentes do padrão podem ser configurados usando a lista regexes .
No seu bloco de configuração (em igor.yml, igor-cal.yml, spinnaker.yml ou spinnaker-cal.yml), você pode definir vários blocos de Masters usando o formato da lista.
Para autenticar com o GitLab CI, use um token de acesso pessoal com permissões 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
As propriedades de construção são lidas automaticamente a partir de oleodutos bem -sucedidos do GitLab CI usando o padrão SPINNAKER_PROPERTY_*=value . Por exemplo, um log que contém uma linha SPINNAKER_PROPERTY_HELLO=world criará um item de propriedade da construção hello=world . Os artefatos Gitlab CI ainda não são suportados.
O CloudDriver pode ser configurado para pesquisar seus registros. Quando esse for o caso, o Igor pode criar um pesquisador que listará os registros indexados pelo CloudDriver, verifique cada um para novas imagens e enviará eventos para eco (daí permitindo gatilhos do Docker)
Propriedades relevantes:
dockerRegistry.enabledservices.clouddriver.baseUrl para ser configuradoO Igor exige que o Redis Server esteja em funcionamento.
Inicie o igor via ./gradlew bootRun . Ou seguindo as instruções usando os scripts de instalação do Spinnaker.
Para iniciar a JVM no modo de depuração, defina o Java System Property DEBUG=true :
./gradlew -DDEBUG=true
A JVM ouvirá um depurador a ser anexado na porta 8188. A JVM não esperará que o depurador seja anexado antes de iniciar o Igor; Os argumentos da JVM relevante podem ser vistos e modificados conforme necessário no build.gradle .