Create a md5 hash of two text files which can be to used as property in Maven command on a Windows Jenkins slave

I have to start a Maven build with a md5 hash as parameter:

mvn clean verify -Dchecksum=ea25acae60d51e86993efcc6757b31cd

This hash has to be generated from the contents of two configuration files (A.xml, B.xml)

The build is executed on a Jenkins slave running on Windows. So I have implement a PowerShell script:

$config_a = [IO.File]::ReadAllText("A.xml")
$config_b = [IO.File]::ReadAllText("B.xml")

$enc = [system.Text.Encoding]::UTF8
$data = $enc.GetBytes($config_a+$config_b)

$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = [System.BitConverter]::ToString($md5.ComputeHash($data)).ToLower().Replace("-", "")

write-host "Calculated Hashsum: " $hash

"CHECKSUM=$hash" | Out-File -Encoding ASCII ".\checksum.properties"

In the Jenkins job the generated properties file is read with the EnvInject Plugin to create the environment variable CHECKSUM.

In the build step ‘Invoke Maven top level’ the Maven build can now be started like this:

clean verify -Dchecksum=$CHECKSUM

Note: without ‘-Encoding ASCII’ the properties file is written as ‘Unicode’. The ‘EnvInject Plugin’ then creates a wrong environment variable and the build fails with:

FATAL: Invalid environment variable name: "ÿþchecksum" java.lang.IllegalArgumentException: Invalid environment variable name: "ÿþCHECKSUM"