fix: 预部署 NC01 Tekton 可复用任务
This commit is contained in:
@@ -9,7 +9,7 @@ metadata:
|
|||||||
pipelinesascode.tekton.dev/on-cel-expression: "event == 'push' && target_branch == 'v0.3' && node == 'NC01'"
|
pipelinesascode.tekton.dev/on-cel-expression: "event == 'push' && target_branch == 'v0.3' && node == 'NC01'"
|
||||||
pipelinesascode.tekton.dev/max-keep-runs: "8"
|
pipelinesascode.tekton.dev/max-keep-runs: "8"
|
||||||
unidesk.ai/owning-config-ref: "config/hwlab-node-lanes.yaml#lanes.v03.targets.NC01"
|
unidesk.ai/owning-config-ref: "config/hwlab-node-lanes.yaml#lanes.v03.targets.NC01"
|
||||||
unidesk.ai/effective-config-sha256: sha256:006b744ab45984d288c71ff75c1bf4d027007ada2123d12cb066dabaa4657b10
|
unidesk.ai/effective-config-sha256: sha256:fe147c2f6591cbe4fb8621d77668974d4b00a8c021b852dc4b88e1f0ad7ccf3f
|
||||||
unidesk.ai/source-artifact-renderer: hwlab-runtime-lane
|
unidesk.ai/source-artifact-renderer: hwlab-runtime-lane
|
||||||
unidesk.ai/source-artifact-mode: remote-pipeline-annotation
|
unidesk.ai/source-artifact-mode: remote-pipeline-annotation
|
||||||
pipelinesascode.tekton.dev/pipeline: ci/pipelines/hwlab-nc01-v03-ci-image-publish.yaml
|
pipelinesascode.tekton.dev/pipeline: ci/pipelines/hwlab-nc01-v03-ci-image-publish.yaml
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ metadata:
|
|||||||
hwlab.pikastech.local/download-profile: jd01-node-default
|
hwlab.pikastech.local/download-profile: jd01-node-default
|
||||||
hwlab.pikastech.local/network-profile: jd01-node-ci-egress
|
hwlab.pikastech.local/network-profile: jd01-node-ci-egress
|
||||||
unidesk.ai/owning-config-ref: "config/hwlab-node-lanes.yaml#lanes.v03.targets.NC01"
|
unidesk.ai/owning-config-ref: "config/hwlab-node-lanes.yaml#lanes.v03.targets.NC01"
|
||||||
unidesk.ai/effective-config-sha256: sha256:006b744ab45984d288c71ff75c1bf4d027007ada2123d12cb066dabaa4657b10
|
unidesk.ai/effective-config-sha256: sha256:fe147c2f6591cbe4fb8621d77668974d4b00a8c021b852dc4b88e1f0ad7ccf3f
|
||||||
unidesk.ai/source-artifact-renderer: hwlab-runtime-lane
|
unidesk.ai/source-artifact-renderer: hwlab-runtime-lane
|
||||||
unidesk.ai/source-artifact-mode: remote-pipeline-annotation
|
unidesk.ai/source-artifact-mode: remote-pipeline-annotation
|
||||||
spec:
|
spec:
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ import {
|
|||||||
ciLaneSettings,
|
ciLaneSettings,
|
||||||
tektonControlPlaneReconcilerCronJob,
|
tektonControlPlaneReconcilerCronJob,
|
||||||
tektonPipeline,
|
tektonPipeline,
|
||||||
|
tektonTasks,
|
||||||
tektonPipelineRunTemplate,
|
tektonPipelineRunTemplate,
|
||||||
tektonPollerCronJob,
|
tektonPollerCronJob,
|
||||||
tektonRbac
|
tektonRbac
|
||||||
@@ -213,6 +214,7 @@ async function plannedFiles(args) {
|
|||||||
putJson("registry/registry.yaml", registryManifest());
|
putJson("registry/registry.yaml", registryManifest());
|
||||||
if (isRuntimeLane(args.lane)) putJson("devops-infra/git-mirror.yaml", devopsInfraGitMirrorManifest(args, deploy));
|
if (isRuntimeLane(args.lane)) putJson("devops-infra/git-mirror.yaml", devopsInfraGitMirrorManifest(args, deploy));
|
||||||
putJson(`${settings.tektonDir}/rbac.yaml`, tektonRbac(args));
|
putJson(`${settings.tektonDir}/rbac.yaml`, tektonRbac(args));
|
||||||
|
putJson(`${settings.tektonDir}/tasks.yaml`, { apiVersion: "v1", kind: "List", items: tektonTasks(args, deploy) });
|
||||||
putJson(`${settings.tektonDir}/pipeline.yaml`, tektonPipeline(args, deploy));
|
putJson(`${settings.tektonDir}/pipeline.yaml`, tektonPipeline(args, deploy));
|
||||||
if (!isRuntimeLane(args.lane)) {
|
if (!isRuntimeLane(args.lane)) {
|
||||||
putJson(`${settings.tektonDir}/poller.yaml`, tektonPollerCronJob(args, deploy));
|
putJson(`${settings.tektonDir}/poller.yaml`, tektonPollerCronJob(args, deploy));
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ function tektonRbac(args = { lane: "node" }) {
|
|||||||
metadata: { name: pipelineRunWriterName, namespace: "hwlab-ci" },
|
metadata: { name: pipelineRunWriterName, namespace: "hwlab-ci" },
|
||||||
rules: [
|
rules: [
|
||||||
{ apiGroups: ["tekton.dev"], resources: ["pipelineruns"], verbs: ["get", "list", "create"] },
|
{ apiGroups: ["tekton.dev"], resources: ["pipelineruns"], verbs: ["get", "list", "create"] },
|
||||||
{ apiGroups: ["tekton.dev"], resources: ["pipelines"], verbs: ["get", "patch", "create"] },
|
{ apiGroups: ["tekton.dev"], resources: ["pipelines", "tasks"], verbs: ["get", "patch", "create"] },
|
||||||
{ apiGroups: ["batch"], resources: ["cronjobs"], verbs: ["get", "patch", "create"] },
|
{ apiGroups: ["batch"], resources: ["cronjobs"], verbs: ["get", "patch", "create"] },
|
||||||
{ apiGroups: ["rbac.authorization.k8s.io"], resources: ["roles", "rolebindings"], verbs: ["get", "patch", "create"] },
|
{ apiGroups: ["rbac.authorization.k8s.io"], resources: ["roles", "rolebindings"], verbs: ["get", "patch", "create"] },
|
||||||
{ apiGroups: [""], resources: ["serviceaccounts"], verbs: ["get", "patch", "create"] }
|
{ apiGroups: [""], resources: ["serviceaccounts"], verbs: ["get", "patch", "create"] }
|
||||||
@@ -175,7 +175,7 @@ function tektonRbac(args = { lane: "node" }) {
|
|||||||
metadata: { name: "hwlab-tekton-pipelinerun-writer", namespace: "hwlab-ci" },
|
metadata: { name: "hwlab-tekton-pipelinerun-writer", namespace: "hwlab-ci" },
|
||||||
rules: [
|
rules: [
|
||||||
{ apiGroups: ["tekton.dev"], resources: ["pipelineruns"], verbs: ["get", "list", "create"] },
|
{ apiGroups: ["tekton.dev"], resources: ["pipelineruns"], verbs: ["get", "list", "create"] },
|
||||||
{ apiGroups: ["tekton.dev"], resources: ["pipelines"], verbs: ["get", "patch", "create"] },
|
{ apiGroups: ["tekton.dev"], resources: ["pipelines", "tasks"], verbs: ["get", "patch", "create"] },
|
||||||
{ apiGroups: ["batch"], resources: ["cronjobs"], verbs: ["get", "patch", "create"] },
|
{ apiGroups: ["batch"], resources: ["cronjobs"], verbs: ["get", "patch", "create"] },
|
||||||
{ apiGroups: ["rbac.authorization.k8s.io"], resources: ["roles", "rolebindings"], verbs: ["get", "patch", "create"] },
|
{ apiGroups: ["rbac.authorization.k8s.io"], resources: ["roles", "rolebindings"], verbs: ["get", "patch", "create"] },
|
||||||
{ apiGroups: [""], resources: ["serviceaccounts"], verbs: ["get", "patch", "create"] }
|
{ apiGroups: [""], resources: ["serviceaccounts"], verbs: ["get", "patch", "create"] }
|
||||||
@@ -477,6 +477,63 @@ function imagePublishTaskSet(args = { lane: "node" }, deploy = null) {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function taskResourceName(pipelineName, taskName) {
|
||||||
|
return `${pipelineName}-${taskName}`.replace(/[^a-z0-9-]/gu, "-").slice(0, 63).replace(/-+$/u, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
function reusableTaskResource(pipelineName, task) {
|
||||||
|
return {
|
||||||
|
apiVersion: "tekton.dev/v1",
|
||||||
|
kind: "Task",
|
||||||
|
metadata: {
|
||||||
|
name: taskResourceName(pipelineName, task.name),
|
||||||
|
namespace: "hwlab-ci",
|
||||||
|
labels: {
|
||||||
|
"app.kubernetes.io/part-of": "hwlab",
|
||||||
|
"hwlab.pikastech.local/tekton-pipeline": pipelineName
|
||||||
|
}
|
||||||
|
},
|
||||||
|
spec: task.taskSpec
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function tektonTasks(args = { lane: "node" }, deploy = null) {
|
||||||
|
const settings = ciLaneSettings(args);
|
||||||
|
const prepareSource = {
|
||||||
|
name: "prepare-source",
|
||||||
|
taskSpec: {
|
||||||
|
params: [
|
||||||
|
{ name: "git-url" }, { name: "git-read-url" }, { name: "source-branch" },
|
||||||
|
{ name: "gitops-branch" }, { name: "lane" }, { name: "catalog-path" },
|
||||||
|
{ name: "image-tag-mode" }, { name: "registry-prefix" }, { name: "services" }, { name: "revision" }
|
||||||
|
],
|
||||||
|
workspaces: [{ name: "source" }, { name: "git-ssh" }],
|
||||||
|
steps: [{ name: "prepare-source", image: ciToolsRunnerImage, env: proxyEnv(), script: prepareSourceScript() }]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const pipelineTasks = [
|
||||||
|
prepareSource,
|
||||||
|
...primitiveValidationTasks.map(primitiveValidationTask),
|
||||||
|
...imagePublishTaskSet(args, deploy),
|
||||||
|
{
|
||||||
|
name: "gitops-promote",
|
||||||
|
taskSpec: {
|
||||||
|
params: [
|
||||||
|
{ name: "git-url" }, { name: "git-read-url" }, { name: "git-write-url" },
|
||||||
|
{ name: "source-branch" }, { name: "gitops-branch" }, { name: "lane" },
|
||||||
|
{ name: "catalog-path" }, { name: "image-tag-mode" }, { name: "runtime-path" },
|
||||||
|
{ name: "revision" }, { name: "registry-prefix" }
|
||||||
|
],
|
||||||
|
results: [{ name: "runtime-ready-required", description: "true when GitOps promotion changed runtime desired state and runtime readiness must be observed" }],
|
||||||
|
workspaces: [{ name: "source" }, { name: "git-ssh" }],
|
||||||
|
steps: [{ name: "promote", image: ciToolsRunnerImage, env: proxyEnv(), script: gitopsPromoteScript() }]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
...(isRuntimeLane(settings.lane) ? [] : [{ name: "runtime-ready", taskSpec: runtimeReadyTask({ profile: settings.profile }).taskSpec }])
|
||||||
|
];
|
||||||
|
return pipelineTasks.map((task) => reusableTaskResource(settings.pipelineName, task));
|
||||||
|
}
|
||||||
|
|
||||||
function tektonPipeline(args = { lane: "node" }, deploy = null) {
|
function tektonPipeline(args = { lane: "node" }, deploy = null) {
|
||||||
const settings = ciLaneSettings(args);
|
const settings = ciLaneSettings(args);
|
||||||
const runtimePath = gitopsPathForProfile(args, settings.profile);
|
const runtimePath = gitopsPathForProfile(args, settings.profile);
|
||||||
@@ -824,6 +881,7 @@ export {
|
|||||||
serviceWorkVolume,
|
serviceWorkVolume,
|
||||||
tektonControlPlaneReconcilerCronJob,
|
tektonControlPlaneReconcilerCronJob,
|
||||||
tektonPipeline,
|
tektonPipeline,
|
||||||
|
tektonTasks,
|
||||||
tektonPipelineRunTemplate,
|
tektonPipelineRunTemplate,
|
||||||
tektonPollerCronJob,
|
tektonPollerCronJob,
|
||||||
tektonRbac
|
tektonRbac
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ const fieldManager = requiredEnv("FIELD_MANAGER");
|
|||||||
const eventName = requiredEnv("RECONCILE_EVENT");
|
const eventName = requiredEnv("RECONCILE_EVENT");
|
||||||
const manifestFiles = [
|
const manifestFiles = [
|
||||||
"deploy/gitops/node/" + tektonDir + "/rbac.yaml",
|
"deploy/gitops/node/" + tektonDir + "/rbac.yaml",
|
||||||
|
"deploy/gitops/node/" + tektonDir + "/tasks.yaml",
|
||||||
"deploy/gitops/node/" + tektonDir + "/pipeline.yaml",
|
"deploy/gitops/node/" + tektonDir + "/pipeline.yaml",
|
||||||
...(process.env.LANE === "v02" ? [] : [
|
...(process.env.LANE === "v02" ? [] : [
|
||||||
"deploy/gitops/node/" + tektonDir + "/poller.yaml",
|
"deploy/gitops/node/" + tektonDir + "/poller.yaml",
|
||||||
@@ -54,6 +55,7 @@ const plurals = new Map([
|
|||||||
["Role", "roles"],
|
["Role", "roles"],
|
||||||
["RoleBinding", "rolebindings"],
|
["RoleBinding", "rolebindings"],
|
||||||
["Pipeline", "pipelines"],
|
["Pipeline", "pipelines"],
|
||||||
|
["Task", "tasks"],
|
||||||
["CronJob", "cronjobs"],
|
["CronJob", "cronjobs"],
|
||||||
["Application", "applications"],
|
["Application", "applications"],
|
||||||
["AppProject", "appprojects"]
|
["AppProject", "appprojects"]
|
||||||
|
|||||||
Reference in New Issue
Block a user