diff --git a/build-windows.yaml b/build-windows.yaml index fa65852ed..56e4077b0 100644 --- a/build-windows.yaml +++ b/build-windows.yaml @@ -6,7 +6,7 @@ services: dockerfile: ./windows/${WINDOWS_FLAVOR}/Dockerfile args: JAVA_HOME: "C:/openjdk-11" - JAVA_VERSION: 11.0.23_9 + JAVA_VERSION: 11.0.23+9 VERSION: ${REMOTING_VERSION} WINDOWS_VERSION_TAG: ${WINDOWS_VERSION_TAG} TOOLS_WINDOWS_VERSION: ${TOOLS_WINDOWS_VERSION} @@ -19,7 +19,7 @@ services: dockerfile: ./windows/${WINDOWS_FLAVOR}/Dockerfile args: JAVA_HOME: "C:/openjdk-17" - JAVA_VERSION: 17.0.10_7 + JAVA_VERSION: 17.0.10+7 VERSION: ${REMOTING_VERSION} WINDOWS_VERSION_TAG: ${WINDOWS_VERSION_TAG} TOOLS_WINDOWS_VERSION: ${TOOLS_WINDOWS_VERSION} @@ -34,7 +34,7 @@ services: dockerfile: ./windows/${WINDOWS_FLAVOR}/Dockerfile args: JAVA_HOME: "C:/openjdk-21" - JAVA_VERSION: "21_35" + JAVA_VERSION: 21+35 VERSION: ${REMOTING_VERSION} WINDOWS_VERSION_TAG: ${WINDOWS_VERSION_TAG} TOOLS_WINDOWS_VERSION: ${TOOLS_WINDOWS_VERSION} diff --git a/build.ps1 b/build.ps1 index 8293d9577..effbcffcb 100644 --- a/build.ps1 +++ b/build.ps1 @@ -10,6 +10,12 @@ Param( ) $ErrorActionPreference = 'Stop' + +$originalDockerComposeFile = 'build-windows.yaml' +$finalDockerComposeFile = 'build-windows-current.yaml' +$baseDockerCmd = 'docker-compose --file={0}' -f $finalDockerComposeFile +$baseDockerBuildCmd = '{0} build --parallel --pull' -f $baseDockerCmd + $AgentTypes = @('agent', 'inbound-agent') if ($AgentType -ne '' -and $AgentType -in $AgentTypes) { $AgentTypes = @($AgentType) @@ -102,6 +108,7 @@ function Test-Image { $items = $AgentTypeAndImageName.Split("|") $agentType = $items[0] $imageName = $items[1] + $javaVersion = $items[2] $imageNameItems = $imageName.Split(":") $imageTag = $imageNameItems[1] @@ -109,6 +116,7 @@ function Test-Image { $env:IMAGE_NAME = $imageName $env:VERSION = "$RemotingVersion" + $env:JAVA_VERSION = "$javaVersion" $targetPath = '.\target\{0}\{1}' -f $agentType, $imageTag if(Test-Path $targetPath) { @@ -128,15 +136,11 @@ function Test-Image { Remove-Item env:\IMAGE_NAME Remove-Item env:\VERSION + Remove-Item env:\JAVA_VERSION return $failed } -$originalDockerComposeFile = 'build-windows.yaml' -$finalDockerComposeFile = 'build-windows-current.yaml' -$baseDockerCmd = 'docker-compose --file={0}' -f $finalDockerComposeFile -$baseDockerBuildCmd = '{0} build --parallel --pull' -f $baseDockerCmd - foreach($agentType in $AgentTypes) { # Ensure remaining env vars used in the docker compose file are defined $env:AGENT_TYPE = $agentType @@ -196,8 +200,9 @@ foreach($agentType in $AgentTypes) { Write-Host "= TEST: Testing all ${agentType} images..." # Only fail the run afterwards in case of any test failures $testFailed = $false - Invoke-Expression "$baseDockerCmd config" | yq '.services[].image' | ForEach-Object { - $testFailed = $testFailed -or (Test-Image ('{0}|{1}' -f $agentType, $_)) + $jdks = Invoke-Expression "$baseDockerCmd config" | yq -r --output-format json '.services' | ConvertFrom-Json + foreach ($jdk in $jdks.PSObject.Properties) { + $testFailed = $testFailed -or (Test-Image ('{0}|{1}|{2}' -f $agentType, $jdk.Value.image, $jdk.Value.build.args.JAVA_VERSION)) } # Fail if any test failures diff --git a/tests/agent.Tests.ps1 b/tests/agent.Tests.ps1 index ac5bcfdfd..3239d8aa5 100644 --- a/tests/agent.Tests.ps1 +++ b/tests/agent.Tests.ps1 @@ -2,6 +2,7 @@ Import-Module -DisableNameChecking -Force $PSScriptRoot/test_helpers.psm1 $global:IMAGE_NAME = Get-EnvOrDefault 'IMAGE_NAME' '' $global:VERSION = Get-EnvOrDefault 'VERSION' '' +$global:JAVA_VERSION = Get-EnvOrDefault 'JAVA_VERSION' '' $imageItems = $global:IMAGE_NAME.Split(":") $GLOBAL:IMAGE_TAG = $imageItems[1] @@ -59,7 +60,6 @@ Describe "[$global:IMAGE_NAME] image has correct applications in the PATH" { It 'has java installed and in the path' { $exitCode, $stdout, $stderr = Run-Program 'docker' "exec $global:CONTAINERNAME $global:CONTAINERSHELL -C `"if(`$null -eq (Get-Command java.exe -ErrorAction SilentlyContinue)) { exit -1 } else { exit 0 }`"" $exitCode | Should -Be 0 - $exitCode, $stdout, $stderr = Run-Program 'docker' "exec $global:CONTAINERNAME $global:CONTAINERSHELL -C `"`$global:VERSION = java -version 2>&1 ; Write-Host `$global:VERSION`"" $r = [regex] "^openjdk version `"(?\d+)" $m = $r.Match($stdout) @@ -150,7 +150,7 @@ Describe "[$global:IMAGE_NAME] can be built with custom build arguments" { BeforeAll { Push-Location -StackName 'agent' -Path "$PSScriptRoot/.." - $exitCode, $stdout, $stderr = Run-Program 'docker' "build --target agent --build-arg `"VERSION=${global:TEST_VERSION}`" --build-arg `"WINDOWS_VERSION_TAG=${global:WINDOWSVERSIONTAG}`" --build-arg `"TOOLS_WINDOWS_VERSION=${global:WINDOWSVERSIONFALLBACKTAG}`" --build-arg `"user=${global:TEST_USER}`" --build-arg `"AGENT_WORKDIR=${global:TEST_AGENT_WORKDIR}`" --tag ${global:IMAGE_NAME} --file ./windows/${global:WINDOWSFLAVOR}/Dockerfile ." + $exitCode, $stdout, $stderr = Run-Program 'docker' "build --target agent --build-arg `"VERSION=${global:TEST_VERSION}`" --build-arg `"JAVA_VERSION=${global:JAVA_VERSION}`" --build-arg `"JAVA_HOME=C:\openjdk-${global:JAVAMAJORVERSION}`" --build-arg `"WINDOWS_VERSION_TAG=${global:WINDOWSVERSIONTAG}`" --build-arg `"TOOLS_WINDOWS_VERSION=${global:WINDOWSVERSIONFALLBACKTAG}`" --build-arg `"user=${global:TEST_USER}`" --build-arg `"AGENT_WORKDIR=${global:TEST_AGENT_WORKDIR}`" --tag ${global:IMAGE_NAME} --file ./windows/${global:WINDOWSFLAVOR}/Dockerfile ." $exitCode | Should -Be 0 $exitCode, $stdout, $stderr = Run-Program 'docker' "run -d -it --name $global:CONTAINERNAME -P $global:IMAGE_NAME $global:CONTAINERSHELL" diff --git a/tests/inbound-agent.Tests.ps1 b/tests/inbound-agent.Tests.ps1 index 7dd771145..5c48ebd07 100644 --- a/tests/inbound-agent.Tests.ps1 +++ b/tests/inbound-agent.Tests.ps1 @@ -2,6 +2,7 @@ Import-Module -DisableNameChecking -Force $PSScriptRoot/test_helpers.psm1 $global:IMAGE_NAME = Get-EnvOrDefault 'IMAGE_NAME' '' $global:VERSION = Get-EnvOrDefault 'VERSION' '' +$global:JAVA_VERSION = Get-EnvOrDefault 'JAVA_VERSION' '' $imageItems = $global:IMAGE_NAME.Split(":") $GLOBAL:IMAGE_TAG = $imageItems[1] @@ -34,7 +35,7 @@ BuildNcatImage($global:WINDOWSVERSIONTAG) Describe "[$global:IMAGE_NAME] build image" { It 'builds image' { - $exitCode, $stdout, $stderr = Run-Program 'docker' "build --build-arg VERSION=${global:VERSION} --build-arg `"WINDOWS_VERSION_TAG=${global:WINDOWSVERSIONTAG}`" --build-arg `"JAVA_VERSION=${global:JAVAMAJORVERSION}`" --build-arg `"JAVA_HOME=C:\openjdk-${global:JAVAMAJORVERSION}`" --tag=${global:IMAGE_TAG} --file ./windows/${global:WINDOWSFLAVOR}/Dockerfile ." + $exitCode, $stdout, $stderr = Run-Program 'docker' "build --build-arg `"VERSION=${global:VERSION}`" --build-arg `"JAVA_VERSION=${global:JAVA_VERSION}`" --build-arg `"JAVA_HOME=C:\openjdk-${global:JAVAMAJORVERSION}`" --build-arg `"WINDOWS_VERSION_TAG=${global:WINDOWSVERSIONTAG}`" --tag=${global:IMAGE_TAG} --file ./windows/${global:WINDOWSFLAVOR}/Dockerfile ." $exitCode | Should -Be 0 } } @@ -123,7 +124,7 @@ Describe "[$global:IMAGE_NAME] custom build args" { } It 'builds image with arguments' { - $exitCode, $stdout, $stderr = Run-Program 'docker' "build --build-arg VERSION=${TEST_VERSION} --build-arg `"WINDOWS_VERSION_TAG=${global:WINDOWSVERSIONTAG}`" --build-arg `"JAVA_VERSION=${global:JAVAMAJORVERSION}`" --build-arg `"JAVA_HOME=C:\openjdk-${global:JAVAMAJORVERSION}`" --build-arg WINDOWS_FLAVOR=${global:WINDOWSFLAVOR} --build-arg CONTAINER_SHELL=${global:CONTAINERSHELL} --tag=${customImageName} --file=./windows/${global:WINDOWSFLAVOR}/Dockerfile ." + $exitCode, $stdout, $stderr = Run-Program 'docker' "build --build-arg `"VERSION=${TEST_VERSION}`" --build-arg `"JAVA_VERSION=${global:JAVA_VERSION}`" --build-arg `"JAVA_HOME=C:\openjdk-${global:JAVAMAJORVERSION}`" --build-arg `"WINDOWS_VERSION_TAG=${global:WINDOWSVERSIONTAG}`" --build-arg WINDOWS_FLAVOR=${global:WINDOWSFLAVOR} --build-arg CONTAINER_SHELL=${global:CONTAINERSHELL} --tag=${customImageName} --file=./windows/${global:WINDOWSFLAVOR}/Dockerfile ." $exitCode | Should -Be 0 $exitCode, $stdout, $stderr = Run-Program 'docker' "run --detach --tty --name $global:CONTAINERNAME $customImageName -Cmd $global:CONTAINERSHELL" diff --git a/windows/nanoserver/Dockerfile b/windows/nanoserver/Dockerfile index c6ec6ce80..d90d98d6d 100644 --- a/windows/nanoserver/Dockerfile +++ b/windows/nanoserver/Dockerfile @@ -22,10 +22,21 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -ARG JAVA_VERSION=17.0.7_7 ARG WINDOWS_VERSION_TAG=ltsc2019 ARG TOOLS_WINDOWS_VERSION=1809 -FROM eclipse-temurin:"${JAVA_VERSION}"-jdk-windowsservercore-"${TOOLS_WINDOWS_VERSION}" AS jdk-core +FROM mcr.microsoft.com/windows/servercore:"${WINDOWS_VERSION_TAG}" AS jdk-core + +# $ProgressPreference: /~https://github.com/PowerShell/PowerShell/issues/2138#issuecomment-251261324 +SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] + +ARG JAVA_VERSION=17.0.10+7 +RUN New-Item -ItemType Directory -Path C:\temp | Out-Null ; ` + $javaMajorVersion = $env:JAVA_VERSION.substring(0,2) ; ` + $msiUrl = 'https://api.adoptium.net/v3/installer/version/jdk-{0}/windows/x64/jdk/hotspot/normal/eclipse?project=jdk' -f $env:JAVA_VERSION.Replace('+', '%2B') ; ` + Invoke-WebRequest $msiUrl -OutFile 'C:\temp\jdk.msi' ; ` + $proc = Start-Process -FilePath 'msiexec.exe' -ArgumentList '/i', 'C:\temp\jdk.msi', '/L*V', 'C:\temp\OpenJDK.log', '/quiet', 'ADDLOCAL=FeatureEnvironment,FeatureJarFileRunWith,FeatureJavaHome', "INSTALLDIR=C:\openjdk-${javaMajorVersion}" -Wait -Passthru ; ` + $proc.WaitForExit() ; ` + Remove-Item -Path C:\temp -Recurse | Out-Null FROM mcr.microsoft.com/powershell:nanoserver-"${TOOLS_WINDOWS_VERSION}" AS pwsh-source diff --git a/windows/windowsservercore/Dockerfile b/windows/windowsservercore/Dockerfile index 609ddf503..7d7bf78d2 100644 --- a/windows/windowsservercore/Dockerfile +++ b/windows/windowsservercore/Dockerfile @@ -22,10 +22,21 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -ARG JAVA_VERSION=17.0.7_7 ARG WINDOWS_VERSION_TAG=ltsc2019 ARG TOOLS_WINDOWS_VERSION=1809 -FROM eclipse-temurin:"${JAVA_VERSION}"-jdk-windowsservercore-"${TOOLS_WINDOWS_VERSION}" AS jdk-core +FROM mcr.microsoft.com/windows/servercore:"${WINDOWS_VERSION_TAG}" AS jdk-core + +# $ProgressPreference: /~https://github.com/PowerShell/PowerShell/issues/2138#issuecomment-251261324 +SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] + +ARG JAVA_VERSION=17.0.10+7 +RUN New-Item -ItemType Directory -Path C:\temp | Out-Null ; ` + $javaMajorVersion = $env:JAVA_VERSION.substring(0,2) ; ` + $msiUrl = 'https://api.adoptium.net/v3/installer/version/jdk-{0}/windows/x64/jdk/hotspot/normal/eclipse?project=jdk' -f $env:JAVA_VERSION.Replace('+', '%2B') ; ` + Invoke-WebRequest $msiUrl -OutFile 'C:\temp\jdk.msi' ; ` + $proc = Start-Process -FilePath 'msiexec.exe' -ArgumentList '/i', 'C:\temp\jdk.msi', '/L*V', 'C:\temp\OpenJDK.log', '/quiet', 'ADDLOCAL=FeatureEnvironment,FeatureJarFileRunWith,FeatureJavaHome', "INSTALLDIR=C:\openjdk-${javaMajorVersion}" -Wait -Passthru ; ` + $proc.WaitForExit() ; ` + Remove-Item -Path C:\temp -Recurse | Out-Null ## Agent image target FROM mcr.microsoft.com/windows/servercore:"${WINDOWS_VERSION_TAG}" AS agent