diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8fb9fc1f..fe8395c9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ # Contributing -### Helm Verison Bumps +### Helm Version Bumps **Chart Version :** When bumping the chart version follow semantic versioning https://semver.org/
**App Version :** When bumping the app version you will also need to bump the chart verison too. Again, follow semantic verisoning when bumping the chart. diff --git a/README.md b/README.md index 52e8a3ec..b9339ded 100644 --- a/README.md +++ b/README.md @@ -591,6 +591,8 @@ spec: # false (default) = Docker support is provided by a sidecar container deployed in the runner pod. # true = No docker sidecar container is deployed in the runner pod but docker can be used within teh runner container instead. The image summerwind/actions-runner-dind is used by default. dockerdWithinRunnerContainer: true + # Optional Docker registry mirror, only applicable if dockerdWithinRunnerContainer = true + dockerRegistryMirror: https://mirror.gcr.io/ # Docker sidecar container image tweaks examples below, only applicable if dockerdWithinRunnerContainer = false dockerdContainerResources: limits: diff --git a/api/v1alpha1/runner_types.go b/api/v1alpha1/runner_types.go index 9e1035c1..d4c101e7 100644 --- a/api/v1alpha1/runner_types.go +++ b/api/v1alpha1/runner_types.go @@ -18,6 +18,7 @@ package v1alpha1 import ( "errors" + "k8s.io/apimachinery/pkg/api/resource" corev1 "k8s.io/api/core/v1" @@ -98,6 +99,8 @@ type RunnerSpec struct { // +optional DockerMTU *int64 `json:"dockerMTU,omitempty"` // +optional + DockerRegistryMirror *string `json:"dockerRegistryMirror,omitempty"` + // +optional HostAliases []corev1.HostAlias `json:"hostAliases,omitempty"` // +optional VolumeSizeLimit *resource.Quantity `json:"volumeSizeLimit,omitempty"` diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index e5dea983..1015b67b 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -706,6 +706,11 @@ func (in *RunnerSpec) DeepCopyInto(out *RunnerSpec) { *out = new(int64) **out = **in } + if in.DockerRegistryMirror != nil { + in, out := &in.DockerRegistryMirror, &out.DockerRegistryMirror + *out = new(string) + **out = **in + } if in.HostAliases != nil { in, out := &in.HostAliases, &out.HostAliases *out = make([]v1.HostAlias, len(*in)) diff --git a/charts/actions-runner-controller/crds/actions.summerwind.dev_runnerdeployments.yaml b/charts/actions-runner-controller/crds/actions.summerwind.dev_runnerdeployments.yaml index 4e240872..cdb2404b 100644 --- a/charts/actions-runner-controller/crds/actions.summerwind.dev_runnerdeployments.yaml +++ b/charts/actions-runner-controller/crds/actions.summerwind.dev_runnerdeployments.yaml @@ -436,6 +436,8 @@ spec: dockerMTU: format: int64 type: integer + dockerRegistryMirror: + type: string dockerVolumeMounts: items: description: VolumeMount describes a mounting of a Volume within a container. diff --git a/charts/actions-runner-controller/crds/actions.summerwind.dev_runnerreplicasets.yaml b/charts/actions-runner-controller/crds/actions.summerwind.dev_runnerreplicasets.yaml index 6d351373..90054dda 100644 --- a/charts/actions-runner-controller/crds/actions.summerwind.dev_runnerreplicasets.yaml +++ b/charts/actions-runner-controller/crds/actions.summerwind.dev_runnerreplicasets.yaml @@ -436,6 +436,8 @@ spec: dockerMTU: format: int64 type: integer + dockerRegistryMirror: + type: string dockerVolumeMounts: items: description: VolumeMount describes a mounting of a Volume within a container. diff --git a/charts/actions-runner-controller/crds/actions.summerwind.dev_runners.yaml b/charts/actions-runner-controller/crds/actions.summerwind.dev_runners.yaml index da783cc3..722ea56a 100644 --- a/charts/actions-runner-controller/crds/actions.summerwind.dev_runners.yaml +++ b/charts/actions-runner-controller/crds/actions.summerwind.dev_runners.yaml @@ -401,6 +401,8 @@ spec: dockerMTU: format: int64 type: integer + dockerRegistryMirror: + type: string dockerVolumeMounts: items: description: VolumeMount describes a mounting of a Volume within a container. diff --git a/config/crd/bases/actions.summerwind.dev_runnerdeployments.yaml b/config/crd/bases/actions.summerwind.dev_runnerdeployments.yaml index 4e240872..cdb2404b 100644 --- a/config/crd/bases/actions.summerwind.dev_runnerdeployments.yaml +++ b/config/crd/bases/actions.summerwind.dev_runnerdeployments.yaml @@ -436,6 +436,8 @@ spec: dockerMTU: format: int64 type: integer + dockerRegistryMirror: + type: string dockerVolumeMounts: items: description: VolumeMount describes a mounting of a Volume within a container. diff --git a/config/crd/bases/actions.summerwind.dev_runnerreplicasets.yaml b/config/crd/bases/actions.summerwind.dev_runnerreplicasets.yaml index 6d351373..90054dda 100644 --- a/config/crd/bases/actions.summerwind.dev_runnerreplicasets.yaml +++ b/config/crd/bases/actions.summerwind.dev_runnerreplicasets.yaml @@ -436,6 +436,8 @@ spec: dockerMTU: format: int64 type: integer + dockerRegistryMirror: + type: string dockerVolumeMounts: items: description: VolumeMount describes a mounting of a Volume within a container. diff --git a/config/crd/bases/actions.summerwind.dev_runners.yaml b/config/crd/bases/actions.summerwind.dev_runners.yaml index da783cc3..722ea56a 100644 --- a/config/crd/bases/actions.summerwind.dev_runners.yaml +++ b/config/crd/bases/actions.summerwind.dev_runners.yaml @@ -401,6 +401,8 @@ spec: dockerMTU: format: int64 type: integer + dockerRegistryMirror: + type: string dockerVolumeMounts: items: description: VolumeMount describes a mounting of a Volume within a container. diff --git a/controllers/runner_controller.go b/controllers/runner_controller.go index 0a5c8511..d567f811 100644 --- a/controllers/runner_controller.go +++ b/controllers/runner_controller.go @@ -635,6 +635,15 @@ func (r *RunnerReconciler) newPod(runner v1alpha1.Runner) (corev1.Pod, error) { }...) } + if mirror := runner.Spec.DockerRegistryMirror; mirror != nil && dockerdInRunner { + pod.Spec.Containers[0].Env = append(pod.Spec.Containers[0].Env, []corev1.EnvVar{ + { + Name: "DOCKER_REGISTRY_MIRROR", + Value: *runner.Spec.DockerRegistryMirror, + }, + }...) + } + // // /runner must be generated on runtime from /runnertmp embedded in the container image. // @@ -758,6 +767,11 @@ func (r *RunnerReconciler) newPod(runner v1alpha1.Runner) (corev1.Pod, error) { ) } + if mirror := runner.Spec.DockerRegistryMirror; mirror != nil { + pod.Spec.Containers[1].Args = append(pod.Spec.Containers[1].Args, + fmt.Sprintf("--registry-mirror=%s", *runner.Spec.DockerRegistryMirror), + ) + } } if len(runner.Spec.Containers) != 0 { diff --git a/runner/startup.sh b/runner/startup.sh index 44a4ddb3..93af046c 100644 --- a/runner/startup.sh +++ b/runner/startup.sh @@ -20,21 +20,17 @@ function wait_for_process () { sudo /bin/bash <