feat: allow ephemeral runner to be optional (#498)
- Adds `ephemeral` option to `runner.spec`
```
....
template:
spec:
ephemeral: false
repository: mumoshu/actions-runner-controller-ci
....
```
- `ephemeral` defaults to `true`
- `entrypoint.sh` in runner/Dockerfile modified to read `RUNNER_EPHEMERAL` flag
- Runner images are backward-compatible. `--once` is omitted only when the new envvar `RUNNER_EPHEMERAL` is explicitly set to `false`.
Resolves #457
This commit is contained in:
parent
a0feee257f
commit
588872a316
|
|
@ -604,6 +604,10 @@ spec:
|
|||
operator: "Exists"
|
||||
effect: "NoExecute"
|
||||
tolerationSeconds: 10
|
||||
# true (default) = The runner restarts after running jobs, to ensure a clean and reproducible build environment
|
||||
# false = The runner is persistent across jobs and doesn't automatically restart
|
||||
# This directly controls the behaviour of `--once` flag provided to the github runner
|
||||
ephemeral: false
|
||||
# true (default) = A privileged docker sidecar container is included in the runner pod.
|
||||
# false = A docker sidecar container is not included in the runner pod and you can't use docker.
|
||||
# If set to false, there are no privileged container and you cannot use docker.
|
||||
|
|
|
|||
|
|
@ -45,6 +45,9 @@ type RunnerSpec struct {
|
|||
// +optional
|
||||
Group string `json:"group,omitempty"`
|
||||
|
||||
// +optional
|
||||
Ephemeral *bool `json:"ephemeral,omitempty"`
|
||||
|
||||
// +optional
|
||||
Containers []corev1.Container `json:"containers,omitempty"`
|
||||
// +optional
|
||||
|
|
|
|||
|
|
@ -587,6 +587,11 @@ func (in *RunnerSpec) DeepCopyInto(out *RunnerSpec) {
|
|||
*out = make([]string, len(*in))
|
||||
copy(*out, *in)
|
||||
}
|
||||
if in.Ephemeral != nil {
|
||||
in, out := &in.Ephemeral, &out.Ephemeral
|
||||
*out = new(bool)
|
||||
**out = **in
|
||||
}
|
||||
if in.Containers != nil {
|
||||
in, out := &in.Containers, &out.Containers
|
||||
*out = make([]v1.Container, len(*in))
|
||||
|
|
|
|||
|
|
@ -600,6 +600,8 @@ spec:
|
|||
type: object
|
||||
type: object
|
||||
type: array
|
||||
ephemeral:
|
||||
type: boolean
|
||||
ephemeralContainers:
|
||||
items:
|
||||
description: An EphemeralContainer is a container that may be added temporarily to an existing pod for user-initiated activities such as debugging. Ephemeral containers have no resource or scheduling guarantees, and they will not be restarted when they exit or when a pod is removed or restarted. If an ephemeral container causes a pod to exceed its resource allocation, the pod may be evicted. Ephemeral containers may not be added by directly updating the pod spec. They must be added via the pod's ephemeralcontainers subresource, and they will appear in the pod spec once added. This is an alpha feature enabled by the EphemeralContainers feature flag.
|
||||
|
|
|
|||
|
|
@ -600,6 +600,8 @@ spec:
|
|||
type: object
|
||||
type: object
|
||||
type: array
|
||||
ephemeral:
|
||||
type: boolean
|
||||
ephemeralContainers:
|
||||
items:
|
||||
description: An EphemeralContainer is a container that may be added temporarily to an existing pod for user-initiated activities such as debugging. Ephemeral containers have no resource or scheduling guarantees, and they will not be restarted when they exit or when a pod is removed or restarted. If an ephemeral container causes a pod to exceed its resource allocation, the pod may be evicted. Ephemeral containers may not be added by directly updating the pod spec. They must be added via the pod's ephemeralcontainers subresource, and they will appear in the pod spec once added. This is an alpha feature enabled by the EphemeralContainers feature flag.
|
||||
|
|
|
|||
|
|
@ -565,6 +565,8 @@ spec:
|
|||
type: object
|
||||
type: object
|
||||
type: array
|
||||
ephemeral:
|
||||
type: boolean
|
||||
ephemeralContainers:
|
||||
items:
|
||||
description: An EphemeralContainer is a container that may be added temporarily to an existing pod for user-initiated activities such as debugging. Ephemeral containers have no resource or scheduling guarantees, and they will not be restarted when they exit or when a pod is removed or restarted. If an ephemeral container causes a pod to exceed its resource allocation, the pod may be evicted. Ephemeral containers may not be added by directly updating the pod spec. They must be added via the pod's ephemeralcontainers subresource, and they will appear in the pod spec once added. This is an alpha feature enabled by the EphemeralContainers feature flag.
|
||||
|
|
|
|||
|
|
@ -600,6 +600,8 @@ spec:
|
|||
type: object
|
||||
type: object
|
||||
type: array
|
||||
ephemeral:
|
||||
type: boolean
|
||||
ephemeralContainers:
|
||||
items:
|
||||
description: An EphemeralContainer is a container that may be added temporarily to an existing pod for user-initiated activities such as debugging. Ephemeral containers have no resource or scheduling guarantees, and they will not be restarted when they exit or when a pod is removed or restarted. If an ephemeral container causes a pod to exceed its resource allocation, the pod may be evicted. Ephemeral containers may not be added by directly updating the pod spec. They must be added via the pod's ephemeralcontainers subresource, and they will appear in the pod spec once added. This is an alpha feature enabled by the EphemeralContainers feature flag.
|
||||
|
|
|
|||
|
|
@ -600,6 +600,8 @@ spec:
|
|||
type: object
|
||||
type: object
|
||||
type: array
|
||||
ephemeral:
|
||||
type: boolean
|
||||
ephemeralContainers:
|
||||
items:
|
||||
description: An EphemeralContainer is a container that may be added temporarily to an existing pod for user-initiated activities such as debugging. Ephemeral containers have no resource or scheduling guarantees, and they will not be restarted when they exit or when a pod is removed or restarted. If an ephemeral container causes a pod to exceed its resource allocation, the pod may be evicted. Ephemeral containers may not be added by directly updating the pod spec. They must be added via the pod's ephemeralcontainers subresource, and they will appear in the pod spec once added. This is an alpha feature enabled by the EphemeralContainers feature flag.
|
||||
|
|
|
|||
|
|
@ -565,6 +565,8 @@ spec:
|
|||
type: object
|
||||
type: object
|
||||
type: array
|
||||
ephemeral:
|
||||
type: boolean
|
||||
ephemeralContainers:
|
||||
items:
|
||||
description: An EphemeralContainer is a container that may be added temporarily to an existing pod for user-initiated activities such as debugging. Ephemeral containers have no resource or scheduling guarantees, and they will not be restarted when they exit or when a pod is removed or restarted. If an ephemeral container causes a pod to exceed its resource allocation, the pod may be evicted. Ephemeral containers may not be added by directly updating the pod spec. They must be added via the pod's ephemeralcontainers subresource, and they will appear in the pod spec once added. This is an alpha feature enabled by the EphemeralContainers feature flag.
|
||||
|
|
|
|||
|
|
@ -567,6 +567,7 @@ func (r *RunnerReconciler) newPod(runner v1alpha1.Runner) (corev1.Pod, error) {
|
|||
privileged bool = true
|
||||
dockerdInRunner bool = runner.Spec.DockerdWithinRunnerContainer != nil && *runner.Spec.DockerdWithinRunnerContainer
|
||||
dockerEnabled bool = runner.Spec.DockerEnabled == nil || *runner.Spec.DockerEnabled
|
||||
ephemeral bool = runner.Spec.Ephemeral == nil || *runner.Spec.Ephemeral
|
||||
)
|
||||
|
||||
runnerImage := runner.Spec.Image
|
||||
|
|
@ -625,6 +626,10 @@ func (r *RunnerReconciler) newPod(runner v1alpha1.Runner) (corev1.Pod, error) {
|
|||
Name: "RUNNER_WORKDIR",
|
||||
Value: workDir,
|
||||
},
|
||||
{
|
||||
Name: "RUNNER_EPHEMERAL",
|
||||
Value: fmt.Sprintf("%v", ephemeral),
|
||||
},
|
||||
}
|
||||
|
||||
if metav1.HasAnnotation(runner.ObjectMeta, annotationKeyRegistrationOnly) {
|
||||
|
|
|
|||
|
|
@ -97,5 +97,10 @@ for f in runsvc.sh RunnerService.js; do
|
|||
sudo mv {patched,bin}/${f}
|
||||
done
|
||||
|
||||
args=()
|
||||
if [ "${RUNNER_EPHEMERAL}" != "false" ]; then
|
||||
args+=(--once)
|
||||
fi
|
||||
|
||||
unset RUNNER_NAME RUNNER_REPO RUNNER_TOKEN
|
||||
exec ./bin/runsvc.sh --once
|
||||
exec ./bin/runsvc.sh "${args[@]}"
|
||||
|
|
|
|||
Loading…
Reference in New Issue