From afbd3538088f012b0706bf63e4d9c8aa6a41b430 Mon Sep 17 00:00:00 2001 From: Yi Chen <69284638+yi-portainer@users.noreply.github.com> Date: Sun, 31 Jan 2021 17:46:45 +1300 Subject: [PATCH] Merge windows buildx to develop (#4796) * feat(build): introducing buildx for Windows * feat(build): re-ordered USER * feat(build): Fixed Typo * feat(build): fixed typo Co-authored-by: ssbkang --- build/build_binary_azuredevops.ps1 | 24 ------ build/build_binary_azuredevops.sh | 13 ++- build/download_docker_binary.ps1 | 15 ---- build/download_docker_binary.sh | 3 +- build/download_docker_compose_binary.ps1 | 8 -- build/download_docker_compose_binary.sh | 3 + build/download_kompose_binary.ps1 | 8 -- build/download_kompose_binary.sh | 9 +- build/download_kubectl_binary.ps1 | 8 -- build/download_kubectl_binary.sh | 11 ++- build/windows/Dockerfile | 24 ++++++ build/windows2016/nanoserver/Dockerfile | 27 ------ gruntfile.js | 103 ++++++++--------------- 13 files changed, 89 insertions(+), 167 deletions(-) delete mode 100755 build/build_binary_azuredevops.ps1 delete mode 100644 build/download_docker_binary.ps1 delete mode 100755 build/download_docker_compose_binary.ps1 delete mode 100644 build/download_kompose_binary.ps1 delete mode 100644 build/download_kubectl_binary.ps1 create mode 100644 build/windows/Dockerfile delete mode 100644 build/windows2016/nanoserver/Dockerfile diff --git a/build/build_binary_azuredevops.ps1 b/build/build_binary_azuredevops.ps1 deleted file mode 100755 index ac7718c2a..000000000 --- a/build/build_binary_azuredevops.ps1 +++ /dev/null @@ -1,24 +0,0 @@ -param ( - [string]$platform, - [string]$arch -) - -$ErrorActionPreference = "Stop"; - -$binary = "portainer.exe" -$go_path = "$($(Get-ITEM -Path env:AGENT_TEMPDIRECTORY).Value)\go" - -Set-Item env:GOPATH "$go_path" - -New-Item -Name dist -Path "." -ItemType Directory -Force | Out-Null -New-Item -Name portainer -Path "$go_path\src\github.com\portainer" -ItemType Directory -Force | Out-Null - -Copy-Item -Path "api" -Destination "$go_path\src\github.com\portainer\portainer\api" -Recurse -Force - -Set-Location -Path "api\cmd\portainer" - -go get -t -d -v ./... -## go build -v -& cmd /c 'go build -v 2>&1' - -Copy-Item -Path "portainer.exe" -Destination "$($env:BUILD_SOURCESDIRECTORY)\dist\portainer.exe" -Force diff --git a/build/build_binary_azuredevops.sh b/build/build_binary_azuredevops.sh index f209e472c..f6cbbdeba 100755 --- a/build/build_binary_azuredevops.sh +++ b/build/build_binary_azuredevops.sh @@ -1,3 +1,8 @@ +#!/usr/bin/env bash + +PLATFORM=$1 +ARCH=$2 + export GOPATH="/tmp/go" binary="portainer" @@ -10,6 +15,10 @@ cp -R api ${GOPATH}/src/github.com/portainer/portainer/api cd 'api/cmd/portainer' go get -t -d -v ./... -GOOS=$1 GOARCH=$2 CGO_ENABLED=0 go build -a --installsuffix cgo --ldflags '-s' +GOOS=${PLATFORM} GOARCH=${ARCH} CGO_ENABLED=0 go build -a --installsuffix cgo --ldflags '-s' -mv "$BUILD_SOURCESDIRECTORY/api/cmd/portainer/$binary" "$BUILD_SOURCESDIRECTORY/dist/portainer" +if [ "${PLATFORM}" == 'windows' ]; then + mv "$BUILD_SOURCESDIRECTORY/api/cmd/portainer/${binary}.exe" "$BUILD_SOURCESDIRECTORY/dist/portainer.exe" +else + mv "$BUILD_SOURCESDIRECTORY/api/cmd/portainer/$binary" "$BUILD_SOURCESDIRECTORY/dist/portainer" +fi diff --git a/build/download_docker_binary.ps1 b/build/download_docker_binary.ps1 deleted file mode 100644 index 775a3f9aa..000000000 --- a/build/download_docker_binary.ps1 +++ /dev/null @@ -1,15 +0,0 @@ -param ( - [string]$docker_version -) - -$ErrorActionPreference = "Stop"; -$ProgressPreference = "SilentlyContinue"; - -New-Item -Path "docker-binary" -ItemType Directory | Out-Null - -$download_folder = "docker-binary" - -Invoke-WebRequest -O "$($download_folder)/docker-binaries.zip" "https://dockermsft.azureedge.net/dockercontainer/docker-$($docker_version).zip" -Expand-Archive -Path "$($download_folder)/docker-binaries.zip" -DestinationPath "$($download_folder)" -Move-Item -Path "$($download_folder)/docker/docker.exe" -Destination "dist" -Move-Item -Path "$($download_folder)/docker/*.dll" -Destination "dist" diff --git a/build/download_docker_binary.sh b/build/download_docker_binary.sh index cc9b94b00..ec2d2098b 100755 --- a/build/download_docker_binary.sh +++ b/build/download_docker_binary.sh @@ -10,9 +10,10 @@ rm -rf "${DOWNLOAD_FOLDER}" mkdir -pv "${DOWNLOAD_FOLDER}" if [ "${PLATFORM}" == 'win' ]; then - wget -O "${DOWNLOAD_FOLDER}/docker-binaries.zip" "https://download.docker.com/${PLATFORM}/static/stable/${ARCH}/docker-${DOCKER_VERSION}.zip" + wget -O "${DOWNLOAD_FOLDER}/docker-binaries.zip" "https://dockermsft.azureedge.net/dockercontainer/docker-${DOCKER_VERSION}.zip" unzip "${DOWNLOAD_FOLDER}/docker-binaries.zip" -d "${DOWNLOAD_FOLDER}" mv "${DOWNLOAD_FOLDER}/docker/docker.exe" dist/ + mv ${DOWNLOAD_FOLDER}/docker/*.dll dist/ else wget -O "${DOWNLOAD_FOLDER}/docker-binaries.tgz" "https://download.docker.com/${PLATFORM}/static/stable/${ARCH}/docker-${DOCKER_VERSION}.tgz" tar -xf "${DOWNLOAD_FOLDER}/docker-binaries.tgz" -C "${DOWNLOAD_FOLDER}" diff --git a/build/download_docker_compose_binary.ps1 b/build/download_docker_compose_binary.ps1 deleted file mode 100755 index bfafaa52b..000000000 --- a/build/download_docker_compose_binary.ps1 +++ /dev/null @@ -1,8 +0,0 @@ -param ( - [string]$docker_compose_version -) - -$ErrorActionPreference = "Stop"; -$ProgressPreference = "SilentlyContinue"; - -Invoke-WebRequest -O "dist/docker-compose.exe" "https://github.com/docker/compose/releases/download/$($docker_compose_version)/docker-compose-Windows-x86_64.exe" diff --git a/build/download_docker_compose_binary.sh b/build/download_docker_compose_binary.sh index 96a963060..131de5ac4 100755 --- a/build/download_docker_compose_binary.sh +++ b/build/download_docker_compose_binary.sh @@ -10,6 +10,9 @@ if [ "${PLATFORM}" == 'linux' ] && [ "${ARCH}" == 'amd64' ]; then elif [ "${PLATFORM}" == 'mac' ]; then wget -O "dist/docker-compose" "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-Darwin-x86_64" chmod +x "dist/docker-compose" +elif [ "${PLATFORM}" == 'win' ]; then + wget -O "dist/docker-compose.exe" "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-Windows-x86_64.exe" + chmod +x "dist/docker-compose.exe" fi exit 0 diff --git a/build/download_kompose_binary.ps1 b/build/download_kompose_binary.ps1 deleted file mode 100644 index f88b2504e..000000000 --- a/build/download_kompose_binary.ps1 +++ /dev/null @@ -1,8 +0,0 @@ -param ( - [string]$kompose_version -) - -$ErrorActionPreference = "Stop"; -$ProgressPreference = "SilentlyContinue"; - -Invoke-WebRequest -O "dist/kompose.exe" "https://github.com/kubernetes/kompose/releases/download/$($kompose_version)/kompose-windows-amd64.exe" diff --git a/build/download_kompose_binary.sh b/build/download_kompose_binary.sh index b5021e70d..3221aa23a 100755 --- a/build/download_kompose_binary.sh +++ b/build/download_kompose_binary.sh @@ -4,7 +4,12 @@ PLATFORM=$1 ARCH=$2 KOMPOSE_VERSION=$3 -wget -O "dist/kompose" "https://github.com/kubernetes/kompose/releases/download/${KOMPOSE_VERSION}/kompose-${PLATFORM}-${ARCH}" -chmod +x "dist/kompose" +if [ "${PLATFORM}" == 'linux' ]; then + wget -O "dist/kompose" "https://github.com/kubernetes/kompose/releases/download/${KOMPOSE_VERSION}/kompose-${PLATFORM}-${ARCH}" + chmod +x "dist/kompose" +elif [ "${PLATFORM}" == 'windows' ]; then + wget -O "dist/kompose.exe" "https://github.com/kubernetes/kompose/releases/download/${KOMPOSE_VERSION}/kompose-windows-amd64.exe" + chmod +x "dist/kompose.exe" +fi exit 0 diff --git a/build/download_kubectl_binary.ps1 b/build/download_kubectl_binary.ps1 deleted file mode 100644 index d5330762b..000000000 --- a/build/download_kubectl_binary.ps1 +++ /dev/null @@ -1,8 +0,0 @@ -param ( - [string]$kubectl_version -) - -$ErrorActionPreference = "Stop"; -$ProgressPreference = "SilentlyContinue"; - -Invoke-WebRequest -O "dist/kubectl.exe" "https://storage.googleapis.com/kubernetes-release/release/$($kubectl_version)/bin/windows/amd64/kubectl.exe" diff --git a/build/download_kubectl_binary.sh b/build/download_kubectl_binary.sh index b9dd72f73..32215bace 100755 --- a/build/download_kubectl_binary.sh +++ b/build/download_kubectl_binary.sh @@ -4,7 +4,12 @@ PLATFORM=$1 ARCH=$2 KUBECTL_VERSION=$3 -wget -O "dist/kubectl" "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/${PLATFORM}/${ARCH}/kubectl" -chmod +x "dist/kubectl" - exit 0 + +if [ "${PLATFORM}" == 'linux' ]; then + wget -O "dist/kubectl" "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/${PLATFORM}/${ARCH}/kubectl" + chmod +x "dist/kubectl" +elif [ "${PLATFORM}" == 'windows' ]; then + wget -O "dist/kubectl.exe" "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/windows/amd64/kubectl.exe" + chmod +x "dist/kubectl.exe" +fi diff --git a/build/windows/Dockerfile b/build/windows/Dockerfile new file mode 100644 index 000000000..16951f065 --- /dev/null +++ b/build/windows/Dockerfile @@ -0,0 +1,24 @@ +ARG OSVERSION +FROM --platform=linux/amd64 gcr.io/k8s-staging-e2e-test-images/windows-servercore-cache:1.0-linux-amd64-${OSVERSION} as core +FROM --platform=linux/amd64 alpine:3.13.0 as downloader +ENV GIT_VERSION 2.30.0 +ENV GIT_PATCH_VERSION 2 + +RUN mkdir mingit/ \ +&& wget https://github.com/git-for-windows/git/releases/download/v$GIT_VERSION.windows.$GIT_PATCH_VERSION/MinGit-$GIT_VERSION.$GIT_PATCH_VERSION-busybox-64-bit.zip \ +&& unzip MinGit-$GIT_VERSION.$GIT_PATCH_VERSION-busybox-64-bit.zip -d mingit/ + +FROM mcr.microsoft.com/windows/nanoserver:${OSVERSION} +ENV PATH "C:\mingit\cmd;C:\Windows\system32;C:\Windows;" + +COPY --from=downloader /mingit mingit/ +COPY --from=core /Windows/System32/netapi32.dll /Windows/System32/netapi32.dll + +USER ContainerAdministrator + +COPY dist / + +EXPOSE 9000 +EXPOSE 8000 + +ENTRYPOINT ["/portainer.exe"] diff --git a/build/windows2016/nanoserver/Dockerfile b/build/windows2016/nanoserver/Dockerfile deleted file mode 100644 index 851e97540..000000000 --- a/build/windows2016/nanoserver/Dockerfile +++ /dev/null @@ -1,27 +0,0 @@ -FROM mcr.microsoft.com/windows/servercore:ltsc2019 as core - -ENV GIT_VERSION 2.30.0 -ENV GIT_PATCH_VERSION 2 - -RUN powershell -Command $ErrorActionPreference = 'Stop' ; \ - [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 ; \ - Invoke-WebRequest $('https://github.com/git-for-windows/git/releases/download/v{0}.windows.{1}/MinGit-{0}.{1}-busybox-64-bit.zip' -f $env:GIT_VERSION, $env:GIT_PATCH_VERSION) -OutFile 'mingit.zip' -UseBasicParsing ; \ - Expand-Archive mingit.zip -DestinationPath c:\mingit - -FROM mcr.microsoft.com/windows/nanoserver:1809-amd64 - -USER ContainerAdministrator - -COPY --from=core /windows/system32/netapi32.dll /windows/system32/netapi32.dll -COPY --from=core /mingit /mingit - -COPY dist / - -RUN setx /M path "C:\mingit\cmd;%path%" - -WORKDIR / - -EXPOSE 9000 -EXPOSE 8000 - -ENTRYPOINT ["/portainer.exe"] diff --git a/gruntfile.js b/gruntfile.js index bf03bd194..5762f90e1 100644 --- a/gruntfile.js +++ b/gruntfile.js @@ -165,11 +165,7 @@ function shell_build_binary(p, a) { } function shell_build_binary_azuredevops(p, a) { - if (p === 'linux') { - return 'build/build_binary_azuredevops.sh ' + p + ' ' + a + ';'; - } else { - return 'powershell -Command ".\\build\\build_binary_azuredevops.ps1 -platform ' + p + ' -arch ' + a + '"'; - } + return 'build/build_binary_azuredevops.sh ' + p + ' ' + a + ';'; } function shell_run_container() { @@ -195,83 +191,52 @@ function shell_download_docker_binary(p, a) { var ip = ps[p] === undefined ? p : ps[p]; var ia = as[a] === undefined ? a : as[a]; var binaryVersion = p === 'windows' ? '<%= binaries.dockerWindowsVersion %>' : '<%= binaries.dockerLinuxVersion %>'; - - if (p === 'linux' || p === 'mac') { - return ['if [ -f dist/docker ]; then', 'echo "docker binary exists";', 'else', 'build/download_docker_binary.sh ' + ip + ' ' + ia + ' ' + binaryVersion + ';', 'fi'].join(' '); - } else { - return [ - 'powershell -Command "& {if (Test-Path -Path "dist/docker.exe") {', - 'Write-Host "Skipping download, Docker binary exists"', - 'return', - '} else {', - '& ".\\build\\download_docker_binary.ps1" -docker_version ' + binaryVersion + '', - '}}"', - ].join(' '); - } + + return [ + 'if [ -f dist/docker ] || [ -f dist/docker.exe ]; then', + 'echo "docker binary exists";', + 'else', + 'build/download_docker_binary.sh ' + ip + ' ' + ia + ' ' + binaryVersion + ';', + 'fi', + ].join(' '); } function shell_download_docker_compose_binary(p, a) { - console.log('request docker compose for ' + p + ':' + a); var ps = { windows: 'win', darwin: 'mac' }; var as = { arm: 'armhf', arm64: 'aarch64' }; var ip = ps[p] || p; var ia = as[a] || a; - console.log('download docker compose for ' + ip + ':' + ia); - var linuxBinaryVersion = '<%= binaries.dockerLinuxComposeVersion %>'; - var windowsBinaryVersion = '<%= binaries.dockerWindowsComposeVersion %>'; - console.log('download docker compose versions; Linux: ' + linuxBinaryVersion + ' Windows: ' + windowsBinaryVersion); - - if (ip === 'linux' || ip === 'mac') { - return [ - 'if [ -f dist/docker-compose ]; then', - 'echo "Docker Compose binary exists";', - 'else', - 'build/download_docker_compose_binary.sh ' + ip + ' ' + ia + ' ' + linuxBinaryVersion + ';', - 'fi', - ].join(' '); - } else if (ip === 'win') { - return [ - 'powershell -Command "& {if (Test-Path -Path "dist/docker-compose.exe") {', - 'Write-Host "Skipping download, Docker Compose binary exists"', - 'return', - '} else {', - '& ".\\build\\download_docker_compose_binary.ps1" -docker_compose_version ' + windowsBinaryVersion + '', - '}}"', - ].join(' '); - } - console.log('docker compose is downloaded'); + var binaryVersion = p === 'windows' ? '<%= binaries.dockerWindowsComposeVersion %>' : '<%= binaries.dockerLinuxComposeVersion %>'; + + return [ + 'if [ -f dist/docker-compose ] || [ -f dist/docker-compose.exe ]; then', + 'echo "Docker Compose binary exists";', + 'else', + 'build/download_docker_compose_binary.sh ' + ip + ' ' + ia + ' ' + binaryVersion + ';', + 'fi', + ].join(' '); } function shell_download_kompose_binary(p, a) { var binaryVersion = '<%= binaries.komposeVersion %>'; - - if (p === 'linux' || p === 'darwin') { - return ['if [ -f dist/kompose ]; then', 'echo "kompose binary exists";', 'else', 'build/download_kompose_binary.sh ' + p + ' ' + a + ' ' + binaryVersion + ';', 'fi'].join(' '); - } else { - return [ - 'powershell -Command "& {if (Test-Path -Path "dist/kompose.exe") {', - 'Write-Host "Skipping download, Kompose binary exists"', - 'return', - '} else {', - '& ".\\build\\download_kompose_binary.ps1" -kompose_version ' + binaryVersion + '', - '}}"', - ].join(' '); - } + + return [ + 'if [ -f dist/kompose ] || [ -f dist/kompose.exe ]; then', + 'echo "kompose binary exists";', + 'else', + 'build/download_kompose_binary.sh ' + p + ' ' + a + ' ' + binaryVersion + ';', + 'fi', + ].join(' '); } function shell_download_kubectl_binary(p, a) { var binaryVersion = '<%= binaries.kubectlVersion %>'; - - if (p === 'linux' || p === 'darwin') { - return ['if [ -f dist/kubectl ]; then', 'echo "kubectl binary exists";', 'else', 'build/download_kubectl_binary.sh ' + p + ' ' + a + ' ' + binaryVersion + ';', 'fi'].join(' '); - } else { - return [ - 'powershell -Command "& {if (Test-Path -Path "dist/kubectl.exe") {', - 'Write-Host "Skipping download, Kubectl binary exists"', - 'return', - '} else {', - '& ".\\build\\download_kubectl_binary.ps1" -kubectl_version ' + binaryVersion + '', - '}}"', - ].join(' '); - } + + return [ + 'if [ -f dist/kubectl ] || [ -f dist/kubectl.exe ]; then', + 'echo "kubectl binary exists";', + 'else', + 'build/download_kubectl_binary.sh ' + p + ' ' + a + ' ' + binaryVersion + ';', + 'fi', + ].join(' '); }