Estou tentando resolver meu problema de configuração com o Azure DevOps Pipeline. Estou usando modelos no meu pipeline principal, mas há alguns casos em que o próximo pipeline deve funcionar somente se o anterior tiver sido passado. O passed
resultado do modelo anterior é baseado na saída do log.
Versão curta do meu pipeline:
- deployment: Development
<cutting off the rest of the code>
- checkout: APP
- script: |
ansible-playbook \
playbooks/installation.yml
- template: templates/app_log.yml@Pipelines
parameters:
ssh: $(Endpoint)
port: $(Port)
- template: templates/app_symlink.yml@Pipelines
condition: and(succeeded(), eq(variables['appLog.status'], 'Succeeded'))
parameters:
ssh: $(Endpoint)
port: $(Port)
modelos/app_app.yml
parameters:
- name: ssh
type: string
displayName: 'SSH'
- name: port
type: string
displayName: 'Port'
- name: name
type: string
default: 'appLog'
<cutting off the rest of the code>
Quando o app_log.yml termina seu trabalho verificando o status de todos os testes, ele mostra All tests passed
qual deve ser tratado como gatilho para criar um symlink para a nova versão do aplicativo pelo caminho, no entanto, com minhas tentativas de criar alguns if
antes do -template
ou como mostrei no código acima, ele leva ao erro todas as vezes (agora ele mostra o erro como no título). Por outro lado, mesmo se um teste falhar, ele não deve criar nenhum symlink.
Você não pode definir condições ao usar modelos, então o seguinte é inválido:
A solução alternativa é adicionar um
condition
parâmetro aotemplates/app_symlink.yml
modelo - exemplo:Você terá que fazer a mesma coisa em todas as etapas do modelo que dependem da condição.
Usando o modelo:
Considere adicionar outros parâmetros aos seus modelos de tarefas/etapas também, para torná-los configuráveis e extensíveis, como
timeoutInMinutes
,retryCountOnTaskFailure
, etc.