├── .github └── CODEOWNERS ├── .gitignore ├── Jenkinsfile ├── LICENSE.txt ├── Makefile ├── README.adoc ├── alpine ├── Dockerfile └── Makefile ├── common.mk ├── common.psm1 ├── coreruntime ├── 22 │ ├── Dockerfile │ └── Makefile ├── 30 │ ├── Dockerfile │ └── Makefile └── 31 │ ├── Dockerfile │ └── Makefile ├── coresdk ├── 31 │ ├── Dockerfile │ └── Makefile └── 50 │ ├── Dockerfile │ └── Makefile ├── cst.yml ├── docker ├── Dockerfile └── Makefile ├── golang ├── Dockerfile └── Makefile ├── make.ps1 ├── maven ├── Dockerfile.windows ├── Dockerfile.windows-jdk11 ├── Dockerfile.windows-nanoserver ├── Dockerfile.windows-nanoserver-jdk11 ├── Makefile ├── jdk11 │ ├── Dockerfile │ └── Makefile ├── jdk8 │ ├── Dockerfile │ └── Makefile └── make.ps1 ├── node ├── Dockerfile └── Makefile ├── powershell ├── Dockerfile └── Makefile ├── python ├── python2 │ ├── Dockerfile │ └── Makefile └── python3 │ ├── Dockerfile │ └── Makefile ├── ruby ├── Dockerfile └── Makefile └── terraform ├── Dockerfile └── Makefile /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @jenkinsci/team-docker-packaging 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.sw* 2 | build/ 3 | *.tar 4 | .tmp 5 | .idea 6 | -------------------------------------------------------------------------------- /Jenkinsfile: -------------------------------------------------------------------------------- 1 | pipeline { 2 | agent none 3 | 4 | options { 5 | timeout(time: 1, unit: 'HOURS') 6 | buildDiscarder(logRotator(daysToKeepStr: '10')) 7 | timestamps() 8 | } 9 | 10 | triggers { 11 | cron('@daily') 12 | } 13 | 14 | stages { 15 | stage('Build and Test') { 16 | when { 17 | expression { !infra.isTrusted() } 18 | } 19 | 20 | parallel { 21 | stage('Windows') { 22 | agent { 23 | label "docker-windows" 24 | } 25 | steps { 26 | bat "powershell -File ./make.ps1 -Target build" 27 | } 28 | } 29 | stage('Linux') { 30 | agent { 31 | label "docker&&linux" 32 | } 33 | steps { 34 | sh "make lint" 35 | sh "make build" 36 | sh "make test" 37 | } 38 | } 39 | } 40 | } 41 | 42 | 43 | stage('Build and Publish') { 44 | when { 45 | expression { infra.isTrusted() } 46 | } 47 | 48 | parallel { 49 | stage('Windows') { 50 | agent { 51 | label "docker-windows" 52 | } 53 | steps { 54 | script { 55 | // This function is defined in the jenkins-infra/pipeline-library 56 | infra.withDockerCredentials { 57 | bat "powershell -File ./make.ps1 -Target push" 58 | } 59 | } 60 | } 61 | } 62 | stage('Linux') { 63 | agent { 64 | label "docker&&linux" 65 | } 66 | steps { 67 | script { 68 | // This function is defined in the jenkins-infra/pipeline-library 69 | infra.withDockerCredentials { 70 | sh 'make push' 71 | } 72 | } 73 | } 74 | } 75 | } 76 | } 77 | } 78 | } 79 | 80 | // vim: ft=groovy 81 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2019 R Tyler Croy 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # This is the root Makefile for ensuring that the containers are all built 3 | # properly 4 | 5 | # GROUP can be overridden in the environment to root the docker images under 6 | # different registry namespace 7 | GROUP?=jenkins 8 | # PREFIX defaults to `jnlp-agent` and can be changed to compute different image 9 | # names 10 | PREFIX?=jnlp-agent 11 | 12 | # This will run a given make command passed in at the command line, but only if .PHONY commented out 13 | build: build.run 14 | @echo "== All Builds ✅ Succeeded" 15 | 16 | push: push.run 17 | @echo "== All Pushes ✅ Succeeded" 18 | 19 | test: test.run 20 | @echo "== All Tests ✅ Succeeded" 21 | 22 | lint: lint.run 23 | 24 | %.run: 25 | set -e; \ 26 | for d in $$(find . -name Dockerfile -type f); do \ 27 | name=$$(basename $$(dirname $$d)); \ 28 | $(MAKE) -C $$(dirname $$d) $* GROUP=$(GROUP) PREFIX=$(PREFIX) SUFFIX=$$name; \ 29 | done; 30 | 31 | clean: clean.run 32 | docker images -qf "reference=${GROUP}/${PREFIX}*" | xargs -r docker rmi 33 | 34 | 35 | .PHONY: lint build test push clean 36 | -------------------------------------------------------------------------------- /README.adoc: -------------------------------------------------------------------------------- 1 | = Docker inbound agents 2 | 3 | This repository is a collection of Docker images which combine the basics 4 | to run a Jenkins inbound agent with a standard Docker image. 5 | 6 | This makes it easy to use upstream images from as Kubernetes pod templates, 7 | Azure Container Instances, AWS ECS/Fargate, or within other Jenkins agent 8 | systems which rely on using an inbound agent. 9 | 10 | -------------------------------------------------------------------------------- /alpine/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jenkins/inbound-agent:alpine 2 | 3 | # Switch from the Jenkins user to the root user. This is being done 4 | # intentionally to allow the use of apk and other utilities. It is an 5 | # administrator's responsibility to ensure that user namespacing is enabled in 6 | # their docker daemon, or that this will be handled appropriately 7 | USER root 8 | -------------------------------------------------------------------------------- /alpine/Makefile: -------------------------------------------------------------------------------- 1 | include ../common.mk 2 | -------------------------------------------------------------------------------- /common.mk: -------------------------------------------------------------------------------- 1 | # 2 | ## The following variables are defined to allow building a single directory 3 | ## without running the whole Makefile infrastructure, e.g. `make -C node` 4 | # 5 | # GROUP can be overridden in the environment to root the docker images under 6 | # different registry namespace 7 | GROUP?=jenkins 8 | # PREFIX defaults to `jnlp-agent` and can be changed to compute different image 9 | # names 10 | PREFIX?=jnlp-agent 11 | # SUFFIX defaults to the directory name 12 | SUFFIX?=$(shell basename $(shell pwd)) 13 | 14 | ROOT_DIR?=$(dir $(lastword $(MAKEFILE_LIST))) 15 | 16 | IMAGE_TAR?=$(ROOT_DIR)/.tmp/$(SUFFIX)-image.tar 17 | 18 | ABS_ROOT_DIR=$(realpath $(ROOT_DIR)) 19 | 20 | NAME=$(GROUP)/$(PREFIX)-$(SUFFIX) 21 | 22 | build: 23 | docker build -t $(NAME) . 24 | mkdir -p $(shell dirname $(IMAGE_TAR)) 25 | docker save --output $(IMAGE_TAR) $(NAME) 26 | 27 | lint: 28 | @docker run --rm -i hadolint/hadolint:v1.19.0 < Dockerfile || echo "== Lint Tests for $(SUFFIX) ⚠️ Did Not Succeed" 29 | 30 | test: build 31 | @docker run --rm --volume="$(ABS_ROOT_DIR):$(ABS_ROOT_DIR)" --workdir="$(shell pwd)" gcr.io/gcp-runtimes/container-structure-test:v1.10.0 test --driver=tar --image=$(IMAGE_TAR) --config=$(ROOT_DIR)/cst.yml 32 | 33 | clean: 34 | rm -f *.tar 35 | 36 | push: build 37 | docker load --input $(IMAGE_TAR) 38 | docker push $(NAME) 39 | 40 | .PHONY: lint build test push clean 41 | -------------------------------------------------------------------------------- /common.psm1: -------------------------------------------------------------------------------- 1 | function Make() { 2 | [CmdletBinding()] 3 | Param( 4 | [Parameter(Position=1)] 5 | [String] $Target = "build", 6 | [String] $Group = 'jenkins', 7 | [String] $Prefix = 'jnlp-agent', 8 | [String] $Suffix = [string]((Get-Location) -split '\\' | Select-Object -Last 1) 9 | ) 10 | 11 | # 12 | # This is the root module for ensuring that the containers are all built 13 | # properly 14 | 15 | # To use this module, do: 16 | # Import-Module -Force -DisableNameChecking -ArgumentList $args ..\common.psm1 ; Make @args 17 | 18 | # GROUP can be overridden in the environment to root the docker images under 19 | # different registry namespace 20 | if(![System.String]::IsNullOrWhiteSpace($env:GROUP)) { 21 | $Group = $env:GROUP 22 | } 23 | 24 | # PREFIX defaults to `jnlp-agent` and can be changed to compute different image 25 | # names 26 | if(![System.String]::IsNullOrWhiteSpace($env:PREFIX)) { 27 | $Prefix = $env:PREFIX 28 | } 29 | 30 | $NAME="${Group}/${Prefix}-${Suffix}:windows" 31 | 32 | function Build() { 33 | Get-ChildItem -Path * -Include "Dockerfile.windows*" -File | ForEach-Object { 34 | $fullName='{0}{1}' -f $NAME,[System.IO.Path]::GetExtension($_.FullName).Replace(".windows", "") 35 | docker build -t $fullName -f $_ . 36 | } 37 | } 38 | 39 | function Push() { 40 | Get-ChildItem -Path * -Include "Dockerfile.windows*" | ForEach-Object { 41 | $fullName='{0}-{1}' -f $NAME,[System.IO.Path]::GetExtension($_.FullName).Replace(".windows", "").TrimStart('-') 42 | $fullName = $fullName.Trim('-') 43 | Write-Host "Pushing $fullName" 44 | docker push $fullName 45 | } 46 | } 47 | 48 | switch -wildcard ($Target) { 49 | "build" { Build } 50 | "push" { Push } 51 | 52 | default { Write-Error "No target '$Target'" ; Exit -1 } 53 | } 54 | } -------------------------------------------------------------------------------- /coreruntime/22/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jenkins/inbound-agent:alpine as jnlp 2 | 3 | FROM mcr.microsoft.com/dotnet/core/runtime:2.2-alpine 4 | 5 | RUN apk -U add openjdk11-jre 6 | 7 | COPY --from=jnlp /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-agent 8 | COPY --from=jnlp /usr/share/jenkins/agent.jar /usr/share/jenkins/agent.jar 9 | 10 | ENTRYPOINT ["/usr/local/bin/jenkins-agent"] 11 | -------------------------------------------------------------------------------- /coreruntime/22/Makefile: -------------------------------------------------------------------------------- 1 | override SUFFIX:=coreruntime:2.2 2 | override IMAGE_TAR=coreruntime2.2-image.tar 3 | include ../../common.mk 4 | -------------------------------------------------------------------------------- /coreruntime/30/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jenkins/inbound-agent:alpine as jnlp 2 | 3 | FROM mcr.microsoft.com/dotnet/core/runtime:3.0-alpine 4 | 5 | RUN apk -U add openjdk11-jre 6 | 7 | COPY --from=jnlp /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-agent 8 | COPY --from=jnlp /usr/share/jenkins/agent.jar /usr/share/jenkins/agent.jar 9 | 10 | ENTRYPOINT ["/usr/local/bin/jenkins-agent"] 11 | -------------------------------------------------------------------------------- /coreruntime/30/Makefile: -------------------------------------------------------------------------------- 1 | override SUFFIX:=coreruntime:3.0 2 | override IMAGE_TAR=coreruntime3.0-image.tar 3 | include ../../common.mk 4 | -------------------------------------------------------------------------------- /coreruntime/31/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jenkins/inbound-agent:alpine as jnlp 2 | 3 | FROM mcr.microsoft.com/dotnet/core/runtime:3.1-alpine 4 | 5 | RUN apk -U add openjdk11-jre 6 | 7 | COPY --from=jnlp /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-agent 8 | COPY --from=jnlp /usr/share/jenkins/agent.jar /usr/share/jenkins/agent.jar 9 | 10 | ENTRYPOINT ["/usr/local/bin/jenkins-agent"] 11 | -------------------------------------------------------------------------------- /coreruntime/31/Makefile: -------------------------------------------------------------------------------- 1 | override SUFFIX:=coreruntime:3.1 2 | override IMAGE_TAR=coreruntime3.1-image.tar 3 | include ../../common.mk 4 | -------------------------------------------------------------------------------- /coresdk/31/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jenkins/inbound-agent:alpine as jnlp 2 | 3 | FROM mcr.microsoft.com/dotnet/core/sdk:3.1-alpine 4 | 5 | RUN apk -U add openjdk11-jre git openssh && \ 6 | rm -rf /var/lib/apt/lists/* && \ 7 | rm /var/cache/apk/* 8 | 9 | COPY --from=jnlp /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-agent 10 | COPY --from=jnlp /usr/share/jenkins/agent.jar /usr/share/jenkins/agent.jar 11 | 12 | ENTRYPOINT ["/usr/local/bin/jenkins-agent"] 13 | -------------------------------------------------------------------------------- /coresdk/31/Makefile: -------------------------------------------------------------------------------- 1 | override SUFFIX:=coresdk:3.1 2 | override IMAGE_TAR=coresdk3.1-image.tar 3 | include ../../common.mk 4 | -------------------------------------------------------------------------------- /coresdk/50/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jenkins/inbound-agent:alpine as jnlp 2 | 3 | FROM mcr.microsoft.com/dotnet/sdk:5.0-alpine 4 | 5 | RUN apk -U add openjdk11-jre git openssh && \ 6 | rm -rf /var/lib/apt/lists/* && \ 7 | rm /var/cache/apk/* 8 | 9 | COPY --from=jnlp /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-agent 10 | COPY --from=jnlp /usr/share/jenkins/agent.jar /usr/share/jenkins/agent.jar 11 | 12 | ENTRYPOINT ["/usr/local/bin/jenkins-agent"] 13 | -------------------------------------------------------------------------------- /coresdk/50/Makefile: -------------------------------------------------------------------------------- 1 | override SUFFIX:=coresdk:5.0 2 | override IMAGE_TAR=coresdk5.0-image.tar 3 | include ../../common.mk 4 | -------------------------------------------------------------------------------- /cst.yml: -------------------------------------------------------------------------------- 1 | schemaVersion: 2.0.0 2 | 3 | metadataTest: 4 | entrypoint: ["/usr/local/bin/jenkins-agent"] 5 | 6 | fileExistenceTests: 7 | 8 | - name: 'Jenkins agent' 9 | path: '/usr/local/bin/jenkins-agent' 10 | shouldExist: true 11 | - name: 'Jenkins agent jar file' 12 | path: '/usr/share/jenkins/agent.jar' 13 | shouldExist: true -------------------------------------------------------------------------------- /docker/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jenkins/inbound-agent:alpine 2 | 3 | USER root 4 | 5 | # Alpine seems to come with libcurl baked in, which is prone to mismatching 6 | # with newer versions of curl. The solution is to upgrade libcurl. 7 | RUN apk add --no-cache -u libcurl curl 8 | # Install Docker client 9 | ARG DOCKER_VERSION=24.0.6 10 | ARG DOCKER_COMPOSE_VERSION=1.21.0 11 | ARG DOCKER_BUILDX_VERSION=0.16.0 12 | RUN curl -fsSL https://download.docker.com/linux/static/stable/`uname -m`/docker-$DOCKER_VERSION.tgz | tar --strip-components=1 -xz -C /usr/local/bin docker/docker 13 | RUN curl -fsSL https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_VERSION/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose 14 | 15 | # Enable buildx plugin 16 | ## buildx is released as amd64, and uname calls it x86_64 17 | RUN uname -m > /tmp/arch \ 18 | && sed -i 's/x86_64/amd64/g' /tmp/arch \ 19 | && mkdir -p /usr/libexec/docker/cli-plugins/ \ 20 | && curl -fsSL https://github.com/docker/buildx/releases/download/v$DOCKER_BUILDX_VERSION/buildx-v$DOCKER_BUILDX_VERSION.linux-`cat /tmp/arch` > /usr/libexec/docker/cli-plugins/docker-buildx \ 21 | && chmod +x /usr/libexec/docker/cli-plugins/docker-buildx \ 22 | && docker buildx install \ 23 | && rm /tmp/arch 24 | 25 | RUN touch /debug-flag 26 | USER jenkins 27 | -------------------------------------------------------------------------------- /docker/Makefile: -------------------------------------------------------------------------------- 1 | include ../common.mk 2 | -------------------------------------------------------------------------------- /golang/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jenkins/inbound-agent:alpine as jnlp 2 | 3 | FROM golang:1.15-alpine3.12 4 | 5 | RUN apk -U add openjdk11-jre 6 | 7 | COPY --from=jnlp /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-agent 8 | COPY --from=jnlp /usr/share/jenkins/agent.jar /usr/share/jenkins/agent.jar 9 | 10 | ENTRYPOINT ["/usr/local/bin/jenkins-agent"] 11 | -------------------------------------------------------------------------------- /golang/Makefile: -------------------------------------------------------------------------------- 1 | include ../common.mk 2 | -------------------------------------------------------------------------------- /make.ps1: -------------------------------------------------------------------------------- 1 | [CmdletBinding()] 2 | Param( 3 | [Parameter(Position=1)] 4 | [String] $Target = 'build', 5 | [String] $Group = 'jenkins', 6 | [String] $Prefix = 'jnlp-agent' 7 | ) 8 | 9 | # 10 | # This is the root make.ps1 for ensuring that the containers are all built 11 | # properly 12 | 13 | # GROUP can be overridden in the environment to root the docker images under 14 | # different registry namespace 15 | if(![System.String]::IsNullOrWhiteSpace($env:GROUP)) { 16 | $Group = $env:GROUP 17 | } 18 | 19 | # PREFIX defaults to `jnlp-agent` and can be changed to compute different image 20 | # names 21 | if(![System.String]::IsNullOrWhiteSpace($env:PREFIX)) { 22 | $Prefix = $env:PREFIX 23 | } 24 | 25 | function Build() { 26 | Get-ChildItem -Include "Dockerfile.windows*" -File -Recurse | Split-Path -Parent | Get-Unique | ForEach-Object { 27 | Push-Location $_ 28 | try { 29 | .\make.ps1 -Target build -Group "$Group" -Prefix "$Prefix" 30 | } finally { 31 | Pop-Location 32 | } 33 | } 34 | } 35 | 36 | function Push() { 37 | Build 38 | Get-ChildItem -Include "Dockerfile.windows*" -File -Recurse | Split-Path -Parent | Get-Unique | ForEach-Object { 39 | Push-Location $_ 40 | try { 41 | .\make.ps1 -Target push -Group "$Group" -Prefix "$Prefix" 42 | } finally { 43 | Pop-Location 44 | } 45 | } 46 | } 47 | 48 | function Clean() { 49 | docker images -qf "reference=${Group}/${Prefix}*" | ForEach-Object { docker rmi $_ } 50 | } 51 | 52 | switch -wildcard ($Target) { 53 | "build" { Build } 54 | "check" { Build } 55 | "clean" { Clean } 56 | "push" { Push } 57 | 58 | default { Write-Error "No target '$Target'" ; Exit -1 } 59 | } -------------------------------------------------------------------------------- /maven/Dockerfile.windows: -------------------------------------------------------------------------------- 1 | # escape=` 2 | FROM csanchez/maven:3-openjdk-8-windowsservercore-1809 as maven 3 | 4 | FROM jenkins/inbound-agent:windowsservercore-1809 5 | 6 | COPY --from=maven C:/ProgramData/Maven C:/ProgramData/Maven 7 | 8 | ENV JAVA_HOME ${JAVA_HOME} 9 | ENV MAVEN_HOME C:/ProgramData/Maven 10 | 11 | # Windows docker doesn't work well with paths, so we have to expose this using ENV 12 | ENV PATH "${PATH};${MAVEN_HOME}\bin" 13 | 14 | ENTRYPOINT ["powershell.exe", "-f", "C:/ProgramData/Jenkins/jenkins-agent.ps1"] 15 | -------------------------------------------------------------------------------- /maven/Dockerfile.windows-jdk11: -------------------------------------------------------------------------------- 1 | # escape=` 2 | FROM csanchez/maven:3-openjdk-11-windowsservercore-1809 as maven 3 | 4 | FROM jenkins/inbound-agent:jdk11-windowsservercore-1809 5 | 6 | COPY --from=maven C:/ProgramData/Maven C:/ProgramData/Maven 7 | 8 | ENV JAVA_HOME ${JAVA_HOME} 9 | ENV MAVEN_HOME C:/ProgramData/Maven 10 | 11 | # Windows docker doesn't work well with paths, so we have to expose this using ENV 12 | ENV PATH "${PATH};${MAVEN_HOME}\bin" 13 | 14 | ENTRYPOINT ["powershell.exe", "-f", "C:/ProgramData/Jenkins/jenkins-agent.ps1"] 15 | 16 | -------------------------------------------------------------------------------- /maven/Dockerfile.windows-nanoserver: -------------------------------------------------------------------------------- 1 | # escape=` 2 | FROM mcr.microsoft.com/windows/servercore:1809 as core 3 | FROM csanchez/maven:3-openjdk-8-nanoserver-1809 as maven 4 | 5 | FROM jenkins/inbound-agent:jdk8-nanoserver-1809 6 | 7 | COPY --from=maven C:/ProgramData/Maven C:/ProgramData/Maven 8 | 9 | # https://github.com/StefanScherer/dockerfiles-windows/tree/master/golang-issue-21867 10 | COPY --from=core C:/windows/system32/netapi32.dll C:/windows/system32/netapi32.dll 11 | 12 | ENV JAVA_HOME ${JAVA_HOME} 13 | ENV MAVEN_HOME C:\ProgramData\Maven 14 | 15 | # Windows docker doesn't work well with paths, so we have to expose this using ENV 16 | ENV PATH "${PATH};${MAVEN_HOME}\bin" 17 | 18 | ENTRYPOINT ["pwsh.exe", "-f", "C:/ProgramData/Jenkins/jenkins-agent.ps1"] 19 | -------------------------------------------------------------------------------- /maven/Dockerfile.windows-nanoserver-jdk11: -------------------------------------------------------------------------------- 1 | # escape=` 2 | FROM mcr.microsoft.com/windows/servercore:1809 as core 3 | FROM csanchez/maven:3-openjdk-11-nanoserver-1809 as maven 4 | 5 | FROM jenkins/inbound-agent:jdk11-nanoserver-1809 6 | 7 | COPY --from=maven C:/ProgramData/Maven C:/ProgramData/Maven 8 | 9 | # https://github.com/StefanScherer/dockerfiles-windows/tree/master/golang-issue-21867 10 | COPY --from=core C:/windows/system32/netapi32.dll C:/windows/system32/netapi32.dll 11 | 12 | ENV JAVA_HOME ${JAVA_HOME} 13 | ENV MAVEN_HOME C:/ProgramData/Maven 14 | 15 | # Windows docker doesn't work well with paths, so we have to expose this using ENV 16 | ENV PATH "${PATH};${MAVEN_HOME}\bin" 17 | 18 | ENTRYPOINT ["pwsh.exe", "-f", "C:/ProgramData/Jenkins/jenkins-agent.ps1"] 19 | -------------------------------------------------------------------------------- /maven/Makefile: -------------------------------------------------------------------------------- 1 | NAME=$(GROUP)/$(PREFIX)-maven 2 | 3 | build: 4 | docker build -t $(NAME) . 5 | docker build -t $(NAME):jdk11 -f Dockerfile.jdk11 . 6 | 7 | push: 8 | docker push $(NAME) 9 | docker push $(NAME):jdk11 10 | 11 | 12 | .PHONY: build push 13 | -------------------------------------------------------------------------------- /maven/jdk11/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jenkins/inbound-agent:alpine as jnlp 2 | 3 | FROM maven:3.6.3-jdk-11-slim 4 | 5 | RUN apt-get update && \ 6 | apt-get install -y \ 7 | git \ 8 | libfontconfig1 \ 9 | libfreetype6 10 | 11 | COPY --from=jnlp /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-agent 12 | COPY --from=jnlp /usr/share/jenkins/agent.jar /usr/share/jenkins/agent.jar 13 | 14 | ENTRYPOINT ["/usr/local/bin/jenkins-agent"] 15 | -------------------------------------------------------------------------------- /maven/jdk11/Makefile: -------------------------------------------------------------------------------- 1 | include ../../common.mk 2 | -------------------------------------------------------------------------------- /maven/jdk8/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jenkins/inbound-agent:latest-alpine-jdk8 AS jnlp 2 | 3 | FROM maven:3.8.6-jdk-8-slim 4 | 5 | RUN apt-get update && \ 6 | apt-get install -y \ 7 | git \ 8 | libfontconfig1 \ 9 | libfreetype6 10 | 11 | COPY --from=jnlp /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-agent 12 | COPY --from=jnlp /usr/share/jenkins/agent.jar /usr/share/jenkins/agent.jar 13 | 14 | ENTRYPOINT ["/usr/local/bin/jenkins-agent"] 15 | -------------------------------------------------------------------------------- /maven/jdk8/Makefile: -------------------------------------------------------------------------------- 1 | include ../../common.mk 2 | -------------------------------------------------------------------------------- /maven/make.ps1: -------------------------------------------------------------------------------- 1 | Import-Module ..\common.psm1 -Force -DisableNameChecking ; Make @args -------------------------------------------------------------------------------- /node/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jenkins/inbound-agent:alpine as jnlp 2 | 3 | FROM node:alpine 4 | 5 | RUN apk -U add openjdk11-jre git 6 | 7 | COPY --from=jnlp /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-agent 8 | COPY --from=jnlp /usr/share/jenkins/agent.jar /usr/share/jenkins/agent.jar 9 | 10 | ENTRYPOINT ["/usr/local/bin/jenkins-agent"] 11 | -------------------------------------------------------------------------------- /node/Makefile: -------------------------------------------------------------------------------- 1 | include ../common.mk 2 | -------------------------------------------------------------------------------- /powershell/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jenkins/inbound-agent:alpine as jnlp 2 | 3 | from mcr.microsoft.com/powershell:7.1.0-alpine-3.10 4 | 5 | RUN apk -U add openjdk11-jre 6 | 7 | COPY --from=jnlp /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-agent 8 | COPY --from=jnlp /usr/share/jenkins/agent.jar /usr/share/jenkins/agent.jar 9 | 10 | ENTRYPOINT ["/usr/local/bin/jenkins-agent"] -------------------------------------------------------------------------------- /powershell/Makefile: -------------------------------------------------------------------------------- 1 | include ../common.mk -------------------------------------------------------------------------------- /python/python2/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jenkins/inbound-agent:alpine as jnlp 2 | 3 | FROM python:2-alpine 4 | 5 | RUN apk -U add openjdk11-jre git 6 | 7 | COPY --from=jnlp /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-agent 8 | COPY --from=jnlp /usr/share/jenkins/agent.jar /usr/share/jenkins/agent.jar 9 | 10 | ENTRYPOINT ["/usr/local/bin/jenkins-agent"] 11 | -------------------------------------------------------------------------------- /python/python2/Makefile: -------------------------------------------------------------------------------- 1 | include ../../common.mk 2 | -------------------------------------------------------------------------------- /python/python3/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jenkins/inbound-agent:alpine as jnlp 2 | 3 | FROM python:alpine 4 | 5 | RUN apk -U add openjdk11-jre git 6 | 7 | COPY --from=jnlp /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-agent 8 | COPY --from=jnlp /usr/share/jenkins/agent.jar /usr/share/jenkins/agent.jar 9 | 10 | ENTRYPOINT ["/usr/local/bin/jenkins-agent"] 11 | -------------------------------------------------------------------------------- /python/python3/Makefile: -------------------------------------------------------------------------------- 1 | include ../../common.mk 2 | -------------------------------------------------------------------------------- /ruby/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jenkins/inbound-agent:jdk11 as jenkins-agent 2 | 3 | FROM ruby:3.2.1-bullseye 4 | 5 | USER root 6 | 7 | # Create default user (must be the same as the official jenkins-agent image) 8 | ARG JENKINS_USERNAME=jenkins 9 | ENV USER=${JENKINS_USERNAME} 10 | ENV HOME=/home/"${JENKINS_USERNAME}" 11 | RUN useradd -m -u 1000 "${JENKINS_USERNAME}" 12 | 13 | RUN apt-get update -qq && \ 14 | apt-get install -qy git zip && \ 15 | apt-get clean && \ 16 | rm -rf /var/lib/apt/lists/* 17 | 18 | COPY --from=jenkins-agent /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-agent 19 | COPY --from=jenkins-agent /usr/share/jenkins/agent.jar /usr/share/jenkins/agent.jar 20 | 21 | ENV JAVA_HOME=/opt/java/openjdk 22 | ENV PATH "${JAVA_HOME}/bin:${PATH}" 23 | COPY --from=jenkins-agent $JAVA_HOME $JAVA_HOME 24 | 25 | USER $JENKINS_USERNAME 26 | 27 | ENTRYPOINT ["/usr/local/bin/jenkins-agent"] 28 | -------------------------------------------------------------------------------- /ruby/Makefile: -------------------------------------------------------------------------------- 1 | include ../common.mk 2 | -------------------------------------------------------------------------------- /terraform/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jenkins/inbound-agent:alpine as jnlp 2 | 3 | FROM hashicorp/terraform:light 4 | 5 | RUN apk -U add openjdk11-jre 6 | 7 | COPY --from=jnlp /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-agent 8 | COPY --from=jnlp /usr/share/jenkins/agent.jar /usr/share/jenkins/agent.jar 9 | 10 | ENTRYPOINT ["/usr/local/bin/jenkins-agent"] 11 | -------------------------------------------------------------------------------- /terraform/Makefile: -------------------------------------------------------------------------------- 1 | include ../common.mk 2 | --------------------------------------------------------------------------------