ARG SERVERCORE_VERSION ARG ARCH=amd64 ARG VERSION=dev FROM library/golang:1.22 as build WORKDIR C:/app COPY . . ENV CGO_ENABLED=0 ENV GOOS="windows" ENV GOARCH="amd64" ENV TAGS="k8s" ENV LINKFLAGS="-s -w -extldflags -static" ENV LDFLAGS="-X main.VERSION={0} $LINKFLAGS -f $VERSION" RUN go build -tags "${TAGS}" -ldflags "${LDFLAGS}" -o agent.exe ./cmd/agent FROM mcr.microsoft.com/windows/servercore:${SERVERCORE_VERSION} AS builder SHELL ["powershell", "-NoLogo", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] # download wins RUN $URL = 'https://github.com/rancher/wins/releases/download/v0.4.17/wins.exe'; \ \ Write-Host ('Downloading Wins from {0} ...' -f $URL); \ curl.exe -sfL $URL -o c:\wins.exe; \ \ Write-Host 'Complete.' # download kubelet RUN $URL = 'https://dl.k8s.io/v1.25.12/kubernetes-client-windows-amd64.tar.gz'; \ Write-Host ('Downloading Kubernetes from {0} ...' -f $URL); \ curl.exe -sfL $URL -o c:\kubernetes.tar.gz; \ \ Write-Host 'Expanding ...'; \ tar.exe -xzvf c:\kubernetes.tar.gz; \ \ Write-Host 'Complete.' # Need to support loglevel & kube-prompt # Move for PATH to work RUN Copy-Item -Path /wins.exe -Destination /Windows/ RUN Copy-Item -Path /kubernetes/client/bin/kubectl.exe -Destination /Windows/ ARG VERSION=${VERSION} LABEL io.cattle.agent true ENV DOCKER_API_VERSION 1.24 ENV AGENT_IMAGE rancher/rancher-agent:${VERSION} ENV SSL_CERT_DIR C:\\etc\\kubernetes\\ssl\\certs COPY --from=build C:/app/agent.exe /etc/rancher/ COPY --from=build C:/app/package/windows/agent.ps1 /etc/rancher/ COPY --from=build C:/app/package/windows/bootstrap.ps1 /etc/rancher/ COPY --from=build C:/app/package/windows/entrypoint.ps1 /etc/rancher/ COPY --from=build C:/app/package/windows/execute.ps1 /etc/rancher/ COPY --from=build C:/app/package/windows/utils.psm1 /etc/rancher/ ENTRYPOINT ["powershell", "-NoLogo", "-NonInteractive", "-File", "c:/etc/rancher/entrypoint.ps1"]