Menyuntik Maklumat Git Menjelang Musim Bunga

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan menunjukkan cara menyuntikkan maklumat repositori Git ke dalam aplikasi Spring Boot yang dibina oleh Maven.

Untuk melakukan ini, kami akan menggunakan maven-git-commit-id-plugin - alat berguna yang dibuat semata-mata untuk tujuan ini.

2. Pergantungan Maven

Mari tambah pemalam ke a bahagian fail pom.xml projek kami:

 pl.project13.maven git-commit-id-plugin 2.2.1 

Anda boleh mendapatkan versi terkini di sini. Perlu diingat bahawa p lugin ini memerlukan sekurang-kurangnya 3.1.1 versi Maven.

3. Konfigurasi

Plugin ini mempunyai banyak bendera dan atribut yang mudah yang memperluas fungsinya. Dalam bahagian ini kita akan menerangkan secara ringkas beberapa daripadanya. Sekiranya anda ingin mengetahui semuanya, kunjungi halaman maven-git-commit-id-plugin, dan jika anda ingin terus melihat contohnya, pergi ke bahagian 4 .

Coretan berikut mengandungi contoh atribut pemalam; tentukan mereka dalam abahagian mengikut keperluan anda.

3.1. Repositori Hilang

Anda boleh mengkonfigurasinya untuk menghilangkan kesalahan sekiranya repositori Git belum dijumpai:

false

3.2. Lokasi Git Repository

Sekiranya anda ingin menentukan lokasi repositori .git khusus , gunakan atribut dotGitDirectory :

${project.basedir}/submodule_directory/.git

3.3. Fail keluaran

Untuk menghasilkan fail sifat dengan nama dan / atau direktori khusus, gunakan bahagian berikut:

 ${project.build.outputDirectory}/filename.properties 

3.4. Kata Kerja

Untuk penggunaan pembalakan yang lebih murah hati:

true

3.5. Penjanaan Fail Properties

Anda boleh mematikan pembuatan fail git.properties :

false

3.6. Awalan Properties

Sekiranya anda ingin menentukan awalan harta tanah khusus, gunakan:

git

3.7. Hanya untuk Repositori Ibu Bapa

Semasa bekerja dengan projek dengan submodul, menetapkan bendera ini memastikan bahawa pemalam berfungsi hanya untuk repositori induk:

true

3.8. Pengecualian Hartanah

Anda mungkin ingin mengecualikan beberapa data sensitif seperti maklumat pengguna repositori:

 git.user.* 

3.9. Penyertaan Hartanah

Termasuk hanya data yang ditentukan juga mungkin:

 git.commit.id 

4. Contoh Permohonan

Mari buat contoh pengawal REST, yang akan mengembalikan maklumat asas mengenai projek kami.

Kami akan membuat aplikasi contoh menggunakan Spring Boot. Sekiranya anda tidak tahu cara mengatur aplikasi Spring Boot, lihat artikel pengantar: Konfigurasikan Aplikasi Web Spring Boot.

Aplikasi kami akan terdiri daripada 2 kelas: Aplikasi dan CommitIdController

4.1. Permohonan

CommitIdApplication akan berfungsi sebagai akar aplikasi kami:

@SpringBootApplication(scanBasePackages = { "com.baeldung.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; } }

Selain mengkonfigurasi root aplikasi kami, kami membuat kacang PropertyPlaceHolderConfigurer sehingga kami dapat mengakses fail sifat yang dihasilkan oleh plugin.

Kami juga menetapkan beberapa bendera, agar aplikasi dapat berjalan lancar walaupun Spring tidak dapat menyelesaikan fail git.properties .

4.2. Pengawal

@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; } }

Seperti yang anda lihat, kami menyuntik sifat Git ke medan kelas.

To see all properties available refer to git.properties file or author's Github page. We also created a simple endpoint which, on HTTP GET request, will respond with a JSON containing injected values.

4.3. Maven Entry

We'll first set up the execution steps to be carried out by the plugin, plus any other configuration property that we consider useful:

 pl.project13.maven git-commit-id-plugin 2.2.1   get-the-git-infos  revision    validate-the-git-infos  validateRevision       

In order for our code to work properly, we need to end up with a git.properties file in our classpath. To achieve this, we have two options.

The first one is to leave it up to the plugin to generate the file. We can specify this by setting the generateGitPropertiesFile configuration property a true value:

 true 

The second option is to include a git.properties file in the resources folder ourselves. We can include only the entries that we'll use in our project:

# 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}

Maven will replace the placeholders with the appropriate values.

Note: Some IDEs don't work well with this plugin, and might throw a ‘circular placeholder reference' error on bootstrap when we define the properties as we did above.

After booting and requesting localhost:8080/commitId you can see a JSON file with a structure similar to the following:

{ "Commit id":"7adb64f1800f8a84c35fef9e5d15c10ab8ecffa6", "Commit branch":"commit_id_plugin", "Commit message":"Merge branch 'master' into commit_id_plugin" }

5. Integration With Spring Boot Actuator

You can use the plugin with Spring Actuator easily.

Seperti yang anda baca dalam dokumentasi, GitInfoContributor akan memilih fail git.properties jika ada. Oleh itu, dengan konfigurasi pemalam lalai, maklumat Git akan dikembalikan semasa memanggil / maklumat akhir:

{ "git": { "branch": "commit_id_plugin", "commit": { "id": "7adb64f", "time": "2016-08-17T19:30:34+0200" } } }

6. Kesimpulannya

Dalam tutorial ini, kami menunjukkan asas penggunaan maven-git-commit-id-plugin dan membuat aplikasi Spring Boot sederhana, yang menggunakan sifat yang dihasilkan oleh plugin.

Konfigurasi yang dibentangkan tidak merangkumi semua bendera dan atribut yang ada, tetapi merangkumi semua asas yang diperlukan untuk mula bekerja dengan pemalam ini.

Anda boleh mendapatkan contoh kod di Github.