mirror of
https://github.com/actions/runner-container-hooks.git
synced 2025-12-14 16:46:43 +00:00
refactor around job claim name and runner instance labels (#20)
* refactor around job claim name, and runner instance labels * repaired failing test
This commit is contained in:
@@ -52,7 +52,9 @@ describe('run script step', () => {
|
|||||||
definitions.runScriptStep.args.entryPoint = '/bin/bash'
|
definitions.runScriptStep.args.entryPoint = '/bin/bash'
|
||||||
definitions.runScriptStep.args.entryPointArgs = [
|
definitions.runScriptStep.args.entryPointArgs = [
|
||||||
'-c',
|
'-c',
|
||||||
`if [[ ! $(env | grep "^PATH=") = "PATH=${definitions.runScriptStep.args.prependPath}:"* ]]; then exit 1; fi`
|
`if [[ ! $(env | grep "^PATH=") = "PATH=${definitions.runScriptStep.args.prependPath.join(
|
||||||
|
':'
|
||||||
|
)}:"* ]]; then exit 1; fi`
|
||||||
]
|
]
|
||||||
await expect(
|
await expect(
|
||||||
runScriptStep(definitions.runScriptStep.args, prepareJobResponse.state)
|
runScriptStep(definitions.runScriptStep.args, prepareJobResponse.state)
|
||||||
|
|||||||
@@ -44,9 +44,9 @@ const STEP_POD_NAME_SUFFIX_LENGTH = 8
|
|||||||
export const JOB_CONTAINER_NAME = 'job'
|
export const JOB_CONTAINER_NAME = 'job'
|
||||||
|
|
||||||
export class RunnerInstanceLabel {
|
export class RunnerInstanceLabel {
|
||||||
runnerhook: string
|
private podName: string
|
||||||
constructor() {
|
constructor() {
|
||||||
this.runnerhook = process.env.ACTIONS_RUNNER_POD_NAME as string
|
this.podName = getRunnerPodName()
|
||||||
}
|
}
|
||||||
|
|
||||||
get key(): string {
|
get key(): string {
|
||||||
@@ -54,10 +54,10 @@ export class RunnerInstanceLabel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get value(): string {
|
get value(): string {
|
||||||
return this.runnerhook
|
return this.podName
|
||||||
}
|
}
|
||||||
|
|
||||||
toString(): string {
|
toString(): string {
|
||||||
return `runner-pod=${this.runnerhook}`
|
return `runner-pod=${this.podName}`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,13 +109,14 @@ export async function createPod(
|
|||||||
export async function createJob(
|
export async function createJob(
|
||||||
container: k8s.V1Container
|
container: k8s.V1Container
|
||||||
): Promise<k8s.V1Job> {
|
): Promise<k8s.V1Job> {
|
||||||
const job = new k8s.V1Job()
|
const runnerInstanceLabel = new RunnerInstanceLabel()
|
||||||
|
|
||||||
|
const job = new k8s.V1Job()
|
||||||
job.apiVersion = 'batch/v1'
|
job.apiVersion = 'batch/v1'
|
||||||
job.kind = 'Job'
|
job.kind = 'Job'
|
||||||
job.metadata = new k8s.V1ObjectMeta()
|
job.metadata = new k8s.V1ObjectMeta()
|
||||||
job.metadata.name = getStepPodName()
|
job.metadata.name = getStepPodName()
|
||||||
job.metadata.labels = { 'runner-pod': getRunnerPodName() }
|
job.metadata.labels = { [runnerInstanceLabel.key]: runnerInstanceLabel.value }
|
||||||
|
|
||||||
job.spec = new k8s.V1JobSpec()
|
job.spec = new k8s.V1JobSpec()
|
||||||
job.spec.ttlSecondsAfterFinished = 300
|
job.spec.ttlSecondsAfterFinished = 300
|
||||||
@@ -127,7 +128,7 @@ export async function createJob(
|
|||||||
job.spec.template.spec.restartPolicy = 'Never'
|
job.spec.template.spec.restartPolicy = 'Never'
|
||||||
job.spec.template.spec.nodeName = await getCurrentNodeName()
|
job.spec.template.spec.nodeName = await getCurrentNodeName()
|
||||||
|
|
||||||
const claimName = `${runnerName()}-work`
|
const claimName = getVolumeClaimName()
|
||||||
job.spec.template.spec.volumes = [
|
job.spec.template.spec.volumes = [
|
||||||
{
|
{
|
||||||
name: 'work',
|
name: 'work',
|
||||||
@@ -240,13 +241,18 @@ export async function createDockerSecret(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const runnerInstanceLabel = new RunnerInstanceLabel()
|
||||||
|
|
||||||
const secretName = getSecretName()
|
const secretName = getSecretName()
|
||||||
const secret = new k8s.V1Secret()
|
const secret = new k8s.V1Secret()
|
||||||
secret.immutable = true
|
secret.immutable = true
|
||||||
secret.apiVersion = 'v1'
|
secret.apiVersion = 'v1'
|
||||||
secret.metadata = new k8s.V1ObjectMeta()
|
secret.metadata = new k8s.V1ObjectMeta()
|
||||||
secret.metadata.name = secretName
|
secret.metadata.name = secretName
|
||||||
secret.metadata.labels = { 'runner-pod': getRunnerPodName() }
|
secret.metadata.labels = {
|
||||||
|
[runnerInstanceLabel.key]: runnerInstanceLabel.value
|
||||||
|
}
|
||||||
secret.kind = 'Secret'
|
secret.kind = 'Secret'
|
||||||
secret.data = {
|
secret.data = {
|
||||||
'.dockerconfigjson': Buffer.from(
|
'.dockerconfigjson': Buffer.from(
|
||||||
@@ -262,13 +268,18 @@ export async function createDockerSecret(
|
|||||||
export async function createSecretForEnvs(envs: {
|
export async function createSecretForEnvs(envs: {
|
||||||
[key: string]: string
|
[key: string]: string
|
||||||
}): Promise<string> {
|
}): Promise<string> {
|
||||||
|
const runnerInstanceLabel = new RunnerInstanceLabel()
|
||||||
|
|
||||||
const secret = new k8s.V1Secret()
|
const secret = new k8s.V1Secret()
|
||||||
const secretName = getSecretName()
|
const secretName = getSecretName()
|
||||||
secret.immutable = true
|
secret.immutable = true
|
||||||
secret.apiVersion = 'v1'
|
secret.apiVersion = 'v1'
|
||||||
secret.metadata = new k8s.V1ObjectMeta()
|
secret.metadata = new k8s.V1ObjectMeta()
|
||||||
secret.metadata.name = secretName
|
secret.metadata.name = secretName
|
||||||
secret.metadata.labels = { 'runner-pod': getRunnerPodName() }
|
|
||||||
|
secret.metadata.labels = {
|
||||||
|
[runnerInstanceLabel.key]: runnerInstanceLabel.value
|
||||||
|
}
|
||||||
secret.kind = 'Secret'
|
secret.kind = 'Secret'
|
||||||
secret.data = {}
|
secret.data = {}
|
||||||
for (const [key, value] of Object.entries(envs)) {
|
for (const [key, value] of Object.entries(envs)) {
|
||||||
@@ -474,16 +485,6 @@ export function namespace(): string {
|
|||||||
return context.namespace
|
return context.namespace
|
||||||
}
|
}
|
||||||
|
|
||||||
function runnerName(): string {
|
|
||||||
const name = process.env.ACTIONS_RUNNER_POD_NAME
|
|
||||||
if (!name) {
|
|
||||||
throw new Error(
|
|
||||||
'Failed to determine runner name. "ACTIONS_RUNNER_POD_NAME" env variables should be set.'
|
|
||||||
)
|
|
||||||
}
|
|
||||||
return name
|
|
||||||
}
|
|
||||||
|
|
||||||
class BackOffManager {
|
class BackOffManager {
|
||||||
private backOffSeconds = 1
|
private backOffSeconds = 1
|
||||||
totalTime = 0
|
totalTime = 0
|
||||||
|
|||||||
@@ -94,7 +94,9 @@ describe('Run script step', () => {
|
|||||||
runScriptStepDefinition.args.entryPoint = '/bin/bash'
|
runScriptStepDefinition.args.entryPoint = '/bin/bash'
|
||||||
runScriptStepDefinition.args.entryPointArgs = [
|
runScriptStepDefinition.args.entryPointArgs = [
|
||||||
'-c',
|
'-c',
|
||||||
`'if [[ ! $(env | grep "^PATH=") = "PATH=${runScriptStepDefinition.args.prependPath}:"* ]]; then exit 1; fi'`
|
`'if [[ ! $(env | grep "^PATH=") = "PATH=${runScriptStepDefinition.args.prependPath.join(
|
||||||
|
':'
|
||||||
|
)}:"* ]]; then exit 1; fi'`
|
||||||
]
|
]
|
||||||
|
|
||||||
await expect(
|
await expect(
|
||||||
|
|||||||
Reference in New Issue
Block a user