Injetando informações Git no Spring
1. Visão geral
Neste tutorial, vamos mostrar como injetar informações de repositório Git em um aplicativo baseado em Spring Boot construído com Maven.
Para fazer isso, usaremosmaven-git-commit-id-plugin - uma ferramenta útil criada exclusivamente para este propósito.
2. Dependências do Maven
Vamos adicionar um plugin a uma seção<plugins> do nosso arquivopom.xml do nosso projeto:
pl.project13.maven
git-commit-id-plugin
2.2.1
Você pode encontrar a versão mais recentehere. Lembre-se de que esteplugin requires at least 3.1.1 version of Maven.
3. Configuração
O plugin possui muitos sinalizadores e atributos convenientes que expandem sua funcionalidade. Nesta seção, descreveremos brevemente alguns deles. Se você quiser saber todos eles, visitepage eif you want to go straight to the example, go to section 4 de maven-git-commit-id-plugin.
Os fragmentos a seguir contêm exemplos de atributos de plug-ins; especifique-os em uma seção<configuration></configuration> de acordo com suas necessidades.
3.1. Repositório ausente
Você pode configurá-lo para omitir erros se o repositório Git não foi encontrado:
false
3.2. Localização do repositório Git
Se você deseja especificar o local do repositório.git personalizado, use o atributodotGitDirectory:
${project.basedir}/submodule_directory/.git
3.3. Arquivo de saída
Para gerar o arquivo de propriedades com um nome e / ou diretório personalizado, use a seção a seguir:
${project.build.outputDirectory}/filename.properties
3.4. Verbosidade
Para um registro mais generoso, use:
true
3.5. Geração de arquivo de propriedades
Você pode desativar a criação de um arquivogit.properties:
false
3.6. Prefixo das propriedades
Se você deseja especificar um prefixo de propriedade customizada, use:
git
3.7. Apenas para repositório pai
Ao trabalhar com projeto com submódulos, a configuração desse sinalizador garante que esse plug-in funcione apenas para o repositório pai:
true
3.8. Exclusão de propriedades
Você pode excluir alguns dados confidenciais, como informações do usuário do repositório:
git.user.*
3.9. Inclusão de Propriedades
Também é possível incluir apenas os dados especificados:
git.commit.id
4. Aplicação de amostra
Vamos criar um controlador REST de amostra, que retornará informações básicas sobre nosso projeto.
Criaremos o aplicativo de exemplo usando o Spring Boot. Se você não sabe como configurar um aplicativo Spring Boot, consulte o artigo introdutório:Configure a Spring Boot Web Application.
Nosso aplicativo consistirá em 2 classes:ApplicationeCommitIdController
4.1. Inscrição
CommitIdApplication servirá como uma raiz de nosso aplicativo:
@SpringBootApplication(scanBasePackages = { "com.example.git" })
public class CommitIdApplication {
public static void main(String[] args) {
SpringApplication.run(CommitIdApplication.class, args);
}
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
PropertySourcesPlaceholderConfigurer propsConfig
= new PropertySourcesPlaceholderConfigurer();
propsConfig.setLocation(new ClassPathResource("git.properties"));
propsConfig.setIgnoreResourceNotFound(true);
propsConfig.setIgnoreUnresolvablePlaceholders(true);
return propsConfig;
}
}
Além de configurar a raiz do nosso aplicativo, criamos o beanPropertyPlaceHolderConfigurer para que possamos acessar o arquivo de propriedades gerado pelo plugin.
Também definimos alguns sinalizadores, para que o aplicativo funcione sem problemas mesmo se o Spring não puder resolver o arquivogit.properties.
4.2. Controlador
@RestController
public class CommitInfoController {
@Value("${git.commit.message.short}")
private String commitMessage;
@Value("${git.branch}")
private String branch;
@Value("${git.commit.id}")
private String commitId;
@RequestMapping("/commitId")
public Map getCommitId() {
Map result = new HashMap<>();
result.put("Commit message",commitMessage);
result.put("Commit branch", branch);
result.put("Commit id", commitId);
return result;
}
}
Como você pode ver, estamos injetando propriedades do Git nos campos da classe.
Para ver todas as propriedades disponíveis, consulte o arquivogit.properties ou o Githubpage do autor. Também criamos um endpoint simples que, na solicitação HTTP GET, responderá coma JSON contendo valores injetados.
4.3. Maven Entry
Primeiro, vamos configurar as etapas de execução a serem realizadas pelo plug-in, além de qualquer outra propriedade de configuração que consideramos útil:
pl.project13.maven
git-commit-id-plugin
2.2.1
get-the-git-infos
revision
validate-the-git-infos
validateRevision
Para que nosso código funcione corretamente, precisamos terminar com umgit.properties file em nosso classpath. Para conseguir isso, temos duas opções.
O primeiro é deixar o plug-in para gerar o arquivo. Podemos especificar isso definindo a propriedade de configuraçãogenerateGitPropertiesFile como um valortrue:
true
A segunda opção é incluir um arquivogit.properties na pasta de recursos. Podemos incluir apenas as entradas que usaremos em nosso projeto:
# git.properties
git.tags=${git.tags}
git.branch=${git.branch}
git.dirty=${git.dirty}
git.remote.origin.url=${git.remote.origin.url}
git.commit.id=${git.commit.id}
git.commit.id.abbrev=${git.commit.id.abbrev}
git.commit.id.describe=${git.commit.id.describe}
git.commit.id.describe-short=${git.commit.id.describe-short}
git.commit.user.name=${git.commit.user.name}
git.commit.user.email=${git.commit.user.email}
git.commit.message.full=${git.commit.message.full}
git.commit.message.short=${git.commit.message.short}
git.commit.time=${git.commit.time}
git.closest.tag.name=${git.closest.tag.name}
git.closest.tag.commit.count=${git.closest.tag.commit.count}
git.build.user.name=${git.build.user.name}
git.build.user.email=${git.build.user.email}
git.build.time=${git.build.time}
git.build.host=${git.build.host}
git.build.version=${git.build.version}
O Maven substituirá os espaços reservados pelos valores apropriados.
Nota: Alguns IDEs não funcionam bem com este plug-in e podem lançar um erro de "referência de espaço reservado circular" no bootstrap quando definimos as propriedades como fizemos acima.
Depois de inicializar e solicitarlocalhost:8080/commitId, você pode ver um arquivo JSON com uma estrutura semelhante à seguinte:
{
"Commit id":"7adb64f1800f8a84c35fef9e5d15c10ab8ecffa6",
"Commit branch":"commit_id_plugin",
"Commit message":"Merge branch 'master' into commit_id_plugin"
}
5. Integração com Spring Boot Actuator
Você pode usar o plugin comSpring Actuator facilmente.
Como você pode ler emdocumentation,GitInfoContributor selecionará o arquivogit.properties, se disponível. Portanto, com a configuração do plug-in padrão, as informações Git serão retornadas ao chamar o endpoint/info:
{
"git": {
"branch": "commit_id_plugin",
"commit": {
"id": "7adb64f",
"time": "2016-08-17T19:30:34+0200"
}
}
}
6. Conclusão
Neste tutorial mostramos os fundamentos do uso demaven-git-commit-id-plugine criamos um aplicativo Spring Boot simples, que faz uso das propriedades geradas pelo plugin.
A configuração apresentada não abrange todos os sinalizadores e atributos disponíveis, mas abrange todos os princípios necessários para começar a trabalhar com este plug-in.
Você pode encontrar exemplos de código emGithub.