Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Build e Deploy

Gostaria de saber se é possível configurar (tanto no Angular quanto no React) alguma forma de build que me permita fazer um unico build e fazer o deploy em diferentes ambientes. No caso a necessidade seria só trocar o valor de uma variável que é usada nas chamadas de api, exemplo:

const apiUrl = 'vld.caminhoapi.com'
const apiUrl = 'qa.caminhoapi.com'
const apiUrl = 'prd.caminhoapi.com'

No caso minha ideia era criar ter um arquivo em cada ambiente que teria essa informação sem ser alterada, mas não sei como fazer esse arquivo ser ignorado na hora de gerar o build e manter o carregamento do mesmo.

5 respostas

Fala ai Victor, tudo bem? É possível sim, isso pode ser feito de N maneiras.

No Angular recomendo utilizar a pasta environments e criar arquivos diferentes para cada ambiente, exemplo:

environments.ts // desenvolvimento
environments.prod.ts // produção
environments.qa.ts // teste
environments.homolog.ts // homologação

E pode pedir para o Angular CLI usar cada um desses diferentes arquivos com o parâmetro --configuration ou -c (apelido).

ng build -c production
ng build -c homolog
ng build -c qa

Onde os nomes passados para o -c serão chaves existentes e definidos no seu angular.json dentro da propriedade configurations.

No caso do React você pode trabalhar de forma muito parecida, criando um arquivo js para cada ambiente e através de uma variável de ambiente você decide qual arquivo carregar.

Ou usar os famosos .env.

Espero ter ajudado.

Mas nesse cenário eu precisaria fazer um novo build a cada deploy, certo?

Estou trabalhando em um projeto que hoje está em AngularJs, e gostaria de migrar o mesmo, porém como toda a parte de infra/deploy fica na mão do cliente, preciso ter como fazer um único build e só trocar o apontamento/valor dessas variáveis.

E isso tem que rodar no IIS quando for publicado.

solução!

Em um único build fica bem complicado, além de não ser uma boa prática.

O ideal é que você fala um build para cada ambiente, um deploy para cada um e tenha uma pipeline que tenha esses passos para cada ambiente.

Espero ter ajudado.

Entendo, mas por curiosidade, por que é uma má prática?

Porque você precisa setar coisas diferentes para ambientes diferentes. Então fazer tudo isso em um único passo iria dar muito trabalho e em alguns momentos algumas "gambiarras" seriam necessárias.

Agora se você tem um processo de CI/CD (Integração continua e Deploy continuo), onde, durante os pipelines (passos) você terá um passo para cada ambiente.

Ficaria muito mais simples.

Em algumas situações nos fazemos até branchs diferentes no repositório, onde, para cada ambiente temos um branch específica.

Espero ter ajudado.