Como parametrizar os requisitos do agente no TeamCity

2

Em TeamCity , é possível parametrizar os requisitos do agente com base no projeto ou nos parâmetros de configuração do build? Por exemplo. valor pode incluir %...% substituições?

Um exemplo: temos um parâmetro de projeto env.XXX_VERSION que especifica a versão necessária do produto XXX em todas as configurações de compilação do projeto. Podemos então usar esse valor nos scripts de construção relevantes do projeto. (Com o tempo, fazemos cópias deste projeto de construção para diferentes variantes de alguns dos produtos dos quais dependemos, de modo que agora temos 12 projetos diferentes com valores diferentes para os parâmetros). Agora eu também gostaria de incluir um requisito de agente de todas as configurações de compilação relevantes no projeto, para que apenas os agentes utilizáveis sejam considerados. Mas, dado o número de configurações de construção e o número de projetos variantes, prefiro parametrizar o requisito sobre o valor da saída env.XXX_VERSION . Isso é possível?

(Hoje, todos os nossos agentes incluem todas as versões possíveis do software, mas não serão mais possíveis, então precisaremos de requisitos sobre os agentes dos projetos de configurações de construção)

    
por Tonny Madsen 03.08.2016 / 11:10

3 respostas

2

Parece que você já sabe o que deseja fazer e o problema é o grande número de agentes e configurações com os quais você precisa lidar.

Por que não automatizar isso usando a API REST do TeamCity? O servidor do TeamCity tem uma API HTTP integrada que você pode usar para editar / atualizar (quase) qualquer um dos campos que você poderia usar usando a interface web.

Você pode interagir com a API usando sua linguagem de script preferida usando chamadas HTTP GET / PUT para obter e atualizar valores. Nesse caso, acho que valeria a pena você escrever um script para evitar ter que passar pela interface do usuário para atualizar todas as configurações de construção mencionadas.

Você vai escrever um único script (em qualquer linguagem de script que você esteja confortável usando) que você pode executar uma vez para definir todos os requisitos do agente. Pseudo código seguinte

  1. Iterar sobre os projetos no TeamCity

Obtenha a lista de projetos

curl -i -H "Accept: application/json" http://teamcity/httpAuth/app/rest/projects --user username:password
  1. Obtenha o parâmetro XXX_VERSION dos projetos.

Faça um loop em todos os projetos, obtenha todos os parâmetros e analise nossas XXX_VERSION

curl http://teamcity/app/rest/projects/id:PROJECT_NAME/parameters
  1. Defina o requisito do agente nas configurações de construção.

Para cada configuração de compilação, em cada projeto, defina os requisitos do agente na configuração de compilação usando o valor XX_VERSION analisado

curl -X PUT http://teamcity/httpAuth/app/rest/buildTypes/<buildTypeLocator>/agent-requirements/<id> --user username:password

Esta é a ideia geral, mas não completa, gastando tempo tirando esse script da maneira que você economizará muito tempo gerenciando-o através da UI do TeamCity.

link

    
por 11.08.2016 / 16:37
0

Você pode forçar o TeamCity a ser construído em um agente específico sem desabilitar todos os outros agentes conectados.

Veja como:

Ir para Configurações de configuração de construção

Em seguida, Requisitos do agente

Agora, você precisa definir um requisito explícito para um agente específico:

Nome do Parâmetro: system.agent.name

Condição: igual a

Valor: YOUR_SPECIFIC_AGENT_NAME

Além disso, você pode tentar isto:

Navegue por: TeamCity - > Administração - > Agentes - > Selecione um agente - > Guia Configurações compatíveis e, em seguida, Política de configuração de execução atual , em seguida, Execute somente as configurações atribuídas e clique em + Atribuir configurações e conclua.

Por favor, deixe-me saber se isso ajuda.

Obrigado.

    
por 03.08.2016 / 11:21
-1

Não consegui encontrar uma maneira de parametrizar o valor com %...% substituições, mas encontrei uma solução alternativa. Não é o ideal, mas funciona para meu pequeno caso de uso.

Caso de uso: Estou criando configurações de compilação a partir de um modelo e preciso que cada configuração de compilação seja executada somente em uma única máquina específica. Eu queria fazer teamcity.agent.name equals %buildAgentName% no modelo para que o TeamCity me pedisse para preencher o parâmetro quando eu criasse a configuração de compilação a partir do modelo.

Solução: Em vez de usar um parâmetro, basta colocar uma string que não corresponderia a nenhum nome de agente, por exemplo, teamcity.agent.name equals replaceThisWithActualAgentName no modelo. Eu não sou solicitado para o parâmetro, mas isso impede que a configuração de compilação seja executada acidentalmente na máquina errada até que eu substitua o requisito do agente.

Não tenho certeza se isso resolve o seu caso de uso, mas estou postando aqui, caso seja útil para outra pessoa.

    
por 03.02.2017 / 19:24

Tags