Estou tentando melhorar nosso processo de construção/lançamento como um trabalho, mas encontrei um obstáculo e não tenho certeza se é por tentar fazer o impossível ou apenas por não entender alguns conceitos.
Como fonte temos uma aplicação C# asp.net com quatro arquivos appsettings para diferentes ambientes. Os appsettings são os padrões appsettings.json, appsettings.development.json, appsettings.test.json e appsettings.release.json
Nossos ambientes são 'dev', que é um PC de desenvolvedor local, 'test', que é um servidor de teste localizado no local, e 'release' também é local, mas em um servidor público. Mais tarde, o servidor de lançamento estará no Azure como um webapp. Portanto, é bom fazer isso de uma forma compatível com o Azure.
Idealmente, eu quero ter um sistema de construção única onde eu construo o código e gero artefatos, e apenas promovo os artefatos do desenvolvedor para testar e finalmente liberar.
Esta é uma maneira decente de fazer isso; Eu removo todos os arquivos appsettings, exceto appsettings.json, e adiciono um pipeline de compilação para construí-lo e, em seguida, crio vários pipelines de lançamento, um pipeline por ambiente, cada um com uma infinidade de variáveis para configurar o arquivo appsettings.json para corresponder ao ambiente será implantado?
Idealmente, eu gostaria de manter os diferentes arquivos appsettings para que todas as alterações nos ambientes sejam configuradas lá, mas percebo que a maneira como os arquivos appsettings são manipulados na construção significa que isso não funcionará.
Esperando por alguma contribuição para que eu possa começar a configurar isso. E obrigado antecipadamente.
Com base em sua necessidade, você precisa manter um arquivo appsettings.json no projeto e usar diversas variáveis de pipeline para configurar o arquivo appsettings.json com base no ambiente.
Esta é uma situação comum em implantações de CI/CD.
Para atender às suas necessidades, sugiro que você possa usar a tarefa integrada: tarefa File Transform em cada pipeline para substituir o valor no arquivo Appsettings.json.
Aqui está um exemplo:
Appsettings.json
Defina as variáveis do pipeline e use a tarefa File Transform:
Para informações mais detalhadas, você pode consultar este documento: Substituição de variável JSON