Cleanup
parent
4d622063ea
commit
a3745bd8c0
|
|
@ -942,7 +942,12 @@ class Kubernetes {
|
|||
core.info('Job created');
|
||||
try {
|
||||
yield Kubernetes.watchPersistentVolumeClaimUntilReady();
|
||||
yield Kubernetes.watchBuildJobUntilFinished();
|
||||
// We watch the PVC first to allow some time for K8s to notice the job we created and setup a pod.
|
||||
// TODO: Wait for something more reliable.
|
||||
const pod = (yield this.kubeClient.listNamespacedPod(this.namespace)).body.items.find((x) => { var _a, _b; return ((_b = (_a = x.metadata) === null || _a === void 0 ? void 0 : _a.labels) === null || _b === void 0 ? void 0 : _b['job-name']) === this.jobName; });
|
||||
Kubernetes.setPod(pod);
|
||||
yield Kubernetes.watchUntilPodRunning();
|
||||
yield Kubernetes.streamLogs();
|
||||
}
|
||||
catch (error) {
|
||||
core.error(error);
|
||||
|
|
@ -1002,7 +1007,7 @@ class Kubernetes {
|
|||
}
|
||||
});
|
||||
}
|
||||
static watchPodUntilRunningAndRead() {
|
||||
static watchUntilPodRunning() {
|
||||
var _a, _b;
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let ready = false;
|
||||
|
|
@ -1016,7 +1021,7 @@ class Kubernetes {
|
|||
if (phase === 'Running') {
|
||||
core.info('Pod no longer pending');
|
||||
ready = true;
|
||||
return pod;
|
||||
return;
|
||||
}
|
||||
if (phase !== 'Pending') {
|
||||
core.error('Kubernetes job failed');
|
||||
|
|
@ -1024,33 +1029,21 @@ class Kubernetes {
|
|||
}
|
||||
});
|
||||
}
|
||||
static watchBuildJobUntilFinished() {
|
||||
var _a, _b, _c, _d, _e, _f;
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
try {
|
||||
this.podName =
|
||||
((_b = (_a = (yield this.kubeClient.listNamespacedPod(this.namespace)).body.items.find((x) => { var _a, _b; return ((_b = (_a = x.metadata) === null || _a === void 0 ? void 0 : _a.labels) === null || _b === void 0 ? void 0 : _b['job-name']) === this.jobName; })) === null || _a === void 0 ? void 0 : _a.metadata) === null || _b === void 0 ? void 0 : _b.name) || '';
|
||||
core.info(this.podName);
|
||||
const pod = yield Kubernetes.watchPodUntilRunningAndRead();
|
||||
core.info(`Watching build job ${(_c = pod === null || pod === void 0 ? void 0 : pod.metadata) === null || _c === void 0 ? void 0 : _c.name}`);
|
||||
yield Kubernetes.streamLogs(((_d = pod === null || pod === void 0 ? void 0 : pod.metadata) === null || _d === void 0 ? void 0 : _d.name) || '', this.namespace, ((_f = (_e = pod === null || pod === void 0 ? void 0 : pod.status) === null || _e === void 0 ? void 0 : _e.containerStatuses) === null || _f === void 0 ? void 0 : _f[0].name) || '');
|
||||
}
|
||||
catch (error) {
|
||||
core.error('Failed while watching build job');
|
||||
throw error;
|
||||
}
|
||||
});
|
||||
static setPod(pod) {
|
||||
var _a, _b, _c;
|
||||
this.podName = ((_a = pod === null || pod === void 0 ? void 0 : pod.metadata) === null || _a === void 0 ? void 0 : _a.name) || '';
|
||||
this.containerName = ((_c = (_b = pod === null || pod === void 0 ? void 0 : pod.status) === null || _b === void 0 ? void 0 : _b.containerStatuses) === null || _c === void 0 ? void 0 : _c[0].name) || '';
|
||||
}
|
||||
static streamLogs(name, namespace, container) {
|
||||
static streamLogs() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
try {
|
||||
core.info('Polling logs...');
|
||||
core.info(`Streaming logs from pod: ${this.podName} container: ${this.containerName} namespace: ${this.namespace}`);
|
||||
const stream = new stream_1.Writable();
|
||||
stream._write = (chunk, encoding, next) => {
|
||||
core.info(chunk.toString());
|
||||
next();
|
||||
};
|
||||
yield new Promise((resolve) => new client_node_1.Log(this.kubeConfig).log(namespace, name, container, stream, resolve));
|
||||
yield new Promise((resolve) => new client_node_1.Log(this.kubeConfig).log(this.namespace, this.podName, this.containerName, stream, resolve));
|
||||
core.info('end of log stream');
|
||||
}
|
||||
catch (error) {
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -231,7 +231,14 @@ class Kubernetes {
|
|||
|
||||
try {
|
||||
await Kubernetes.watchPersistentVolumeClaimUntilReady();
|
||||
await Kubernetes.watchBuildJobUntilFinished();
|
||||
// We watch the PVC first to allow some time for K8s to notice the job we created and setup a pod.
|
||||
// TODO: Wait for something more reliable.
|
||||
const pod = (await this.kubeClient.listNamespacedPod(this.namespace)).body.items.find(
|
||||
(x) => x.metadata?.labels?.['job-name'] === this.jobName,
|
||||
);
|
||||
Kubernetes.setPod(pod);
|
||||
await Kubernetes.watchUntilPodRunning();
|
||||
await Kubernetes.streamLogs();
|
||||
} catch (error) {
|
||||
core.error(error);
|
||||
} finally {
|
||||
|
|
@ -291,7 +298,7 @@ class Kubernetes {
|
|||
}
|
||||
}
|
||||
|
||||
static async watchPodUntilRunningAndRead() {
|
||||
static async watchUntilPodRunning() {
|
||||
let ready = false;
|
||||
|
||||
while (!ready) {
|
||||
|
|
@ -304,7 +311,7 @@ class Kubernetes {
|
|||
if (phase === 'Running') {
|
||||
core.info('Pod no longer pending');
|
||||
ready = true;
|
||||
return pod;
|
||||
return;
|
||||
}
|
||||
if (phase !== 'Pending') {
|
||||
core.error('Kubernetes job failed');
|
||||
|
|
@ -312,35 +319,24 @@ class Kubernetes {
|
|||
}
|
||||
}
|
||||
|
||||
static async watchBuildJobUntilFinished() {
|
||||
try {
|
||||
this.podName =
|
||||
(await this.kubeClient.listNamespacedPod(this.namespace)).body.items.find(
|
||||
(x) => x.metadata?.labels?.['job-name'] === this.jobName,
|
||||
)?.metadata?.name || '';
|
||||
core.info(this.podName);
|
||||
const pod = await Kubernetes.watchPodUntilRunningAndRead();
|
||||
core.info(`Watching build job ${pod?.metadata?.name}`);
|
||||
await Kubernetes.streamLogs(
|
||||
pod?.metadata?.name || '',
|
||||
this.namespace,
|
||||
pod?.status?.containerStatuses?.[0].name || '',
|
||||
);
|
||||
} catch (error) {
|
||||
core.error('Failed while watching build job');
|
||||
throw error;
|
||||
}
|
||||
static setPod(pod: k8s.V1Pod | any) {
|
||||
this.podName = pod?.metadata?.name || '';
|
||||
this.containerName = pod?.status?.containerStatuses?.[0].name || '';
|
||||
}
|
||||
|
||||
static async streamLogs(name: string, namespace: string, container: string) {
|
||||
static async streamLogs() {
|
||||
try {
|
||||
core.info('Polling logs...');
|
||||
core.info(
|
||||
`Streaming logs from pod: ${this.podName} container: ${this.containerName} namespace: ${this.namespace}`,
|
||||
);
|
||||
const stream = new Writable();
|
||||
stream._write = (chunk, encoding, next) => {
|
||||
core.info(chunk.toString());
|
||||
next();
|
||||
};
|
||||
await new Promise((resolve) => new Log(this.kubeConfig).log(namespace, name, container, stream, resolve));
|
||||
await new Promise((resolve) =>
|
||||
new Log(this.kubeConfig).log(this.namespace, this.podName, this.containerName, stream, resolve),
|
||||
);
|
||||
core.info('end of log stream');
|
||||
} catch (error) {
|
||||
core.error(JSON.stringify(error, undefined, 4));
|
||||
|
|
|
|||
Loading…
Reference in New Issue