Build da aplicação para ambientes de homologação e produção

Fala pessoal, tudo certo?

atualmente na empresa onde trabalho, temos o ambiente de homologação e de produção,

no cvs temos 3 linhas de desenvolvimento, HEAD, o branch de Homologação e de Produção.

criamos assim pois temos arquivos de configuração diferentes para o ambiente de homologação e de produção.

e toda vez que vamos gerar uma versão temos que ficar comparando branchs… isso é ruim pois para dar um replace em um arquivo errado é fácil… alem do trabalho de gerar versão de homologação e depois gerar de produção.

nosso build é feito pelo maven…

gostaria de saber se tem alguma arquitetura diferente para isso ou algum modo de configurar apenas um branch, do modo que é só copiar para produção a mesma versão homologada…

como vocês usam em suas empresas?

valeu galera!

Engraçado esse tópico.

Eu trabalhei por algum tempo em uma empresa que possui bem distintos os ambientes de homologação, testes e produção, devido à alta complexidade do negócio e do total de receita manipulado pelos diversos sistemas´.
Dentro de QA (testes) e homologação, haviam ambientes de 1º, 2º, 3º e estavam criando um 4º nível para testes (desde o código fonte até a aplicação rodando em ambiente semelhante ao de produção).
Além disso, havia ambientes distintos, servidores e VMs apenas para rodar os ambientes de QA e homolog.
Além disso, havia a divisão em serviços, web, banco de dados, webservices e CRM, divididos, mais uma vez, em projetos, manutenção de rotina e expansão.

Para cuidar disso tudo, 15 pessoas, sem contar os testers.
A estrutura era gigante, mas nenhum projeto ou sistema subia com erros.

O processo era o mesmo, pega na branch de desenvolvimento, joga em homolog, compila, faz build e deploy, joga no servidor ou ambiente e deixa para teste.

Testou, gera os pacotes, manda pra produção e produção apenas aplica e monitora.

Então, digo que dependendo da complexidade do negócio, sim, é preciso isso.
A não ser que seja apenas 2 programadores, aí não precisa de tudo isso.

Dá pra fazer isso com o Maven no mesmo branch.

No caso, você teria diferentes profiles para cada ambiente, e cada profile teria arquivos de configuração diferentes:

Ficaria algo do tipo:

<profiles>
		<profile>
			<id>producao</id>
			<build>
				<plugins>
					<plugin>
						<artifactId>maven-antrun-plugin</artifactId>
						<executions>
							<execution>
								<phase>test</phase>
								<goals>
									<goal>run</goal>
								</goals>
								<configuration>
									<tasks>
										<delete dir="${project.build.outputDirectory}/profiles" />
										<copy todir="${project.build.outputDirectory}" overwrite="true">
											<fileset
												dir="${project.build.sourceDirectory}/../resources/profiles/producao" />
										</copy>
									</tasks>
								</configuration>
							</execution>
						</executions>
					</plugin>
					<plugin>
						<artifactId>maven-surefire-plugin</artifactId>
						<configuration>
							<skip>true</skip>
						</configuration>
					</plugin>
				</plugins>
			</build>
		</profile>
	</profiles>

No caso, você poderia ter perfis diferentes para goals diferentes também.

Então, para compilar, você faria:

mvn clean install -Pproducao

opa, blz?

a configuração do profile fica no pom.xml da minha aplicação ou no setting.xml?

obrigado pela ajuda galera!