В Тектоне неизвестное поле "контейнер" - PullRequest
0 голосов
/ 04 февраля 2020

В эти дни меня интересует Tekton.

Однако есть некоторые проблемы, когда я реализую Task с java fabric8.tekton apis.

Существует API, который добавляет шаги в spe c в единицах контейнера (withContainer) в классе TaskBuilder.

Однако я получил сообщение об ошибке во время выполнения рун, как показано ниже, enter image description here

Могу ли я получить несколько советов?

Версия Tekton - v0.10.1

Я использовал пакеты, как показано ниже:

io. fabric8: kubernetes-client: 4.7.1

io.fabric8: tekton-client: 4.7.1

Вот мой полный тестовый код.

package com.example.tekton;

import java.util.ArrayList;
import java.util.List;
import io.fabric8.kubernetes.api.model.Container;
import io.fabric8.kubernetes.api.model.ContainerBuilder;
import io.fabric8.kubernetes.client.BaseClient;
import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.ConfigBuilder;
import io.fabric8.tekton.client.TektonClient;
import io.fabric8.tekton.client.DefaultTektonClient;
import io.fabric8.tekton.client.handlers.TaskHandler;
import io.fabric8.tekton.client.handlers.TaskRunHandler;
import io.fabric8.tekton.pipeline.v1alpha1.ArrayOrString;
import io.fabric8.tekton.pipeline.v1alpha1.Task;
import io.fabric8.tekton.pipeline.v1alpha1.TaskBuilder;
import io.fabric8.tekton.pipeline.v1alpha1.TaskRun;
import io.fabric8.tekton.pipeline.v1alpha1.TaskRunBuilder;
import io.fabric8.tekton.pipeline.v1alpha1.TaskRefBuilder;

public class DefaultKubernetesTest {

public Task getTask() {
  Container con = new ContainerBuilder()
                        .withNewImage("ubuntu")
                        .withNewName("echo-hello-world")
                        .addNewCommand("echo")
                        .addNewArg("hello jinwon world")
                        .build();

    Task task = new TaskBuilder()
        .withApiVersion("tekton.dev/v1alpha1")
        .withKind("Task")
        .withNewMetadata()
            .withName("echo-hello-world-test")
        .endMetadata()
        .withNewSpec()
            .addNewStep()
                .withContainer(con)
            .endStep()
        .endSpec()
        .build();

        return task;
}

public TaskRun getTaskRun() {
    TaskRun taskRun = new TaskRunBuilder()
    .withNewMetadata()
        .withName("taskrun")
        .endMetadata()
    .withNewSpec()
        .withTaskRef(new TaskRefBuilder().withName("echo-hello-world-test").withApiVersion("tekton.dev/v1alpha1").withKind("Task").build())
    .endSpec().build();
    return taskRun;
}

public static void main(String[] args) {
    ConfigBuilder config = new ConfigBuilder();
    DefaultKubernetesTest kubeTest = new DefaultKubernetesTest();
    String username = "testUser";
    String password = "testPwd";

    config = config.withMasterUrl("https://192.168.6.236:6443");
    config = config.withUsername(username);
    config = config.withPassword(password);
    Config kubeConfig = config.build();

    try (DefaultTektonClient test = new DefaultTektonClient(kubeConfig)) {
        Task task = kubeTest.getTask();
        TaskRun taskRun = kubeTest.getTaskRun();
        test.tasks().inNamespace("test").create(task);
        test.taskRuns().inNamespace("test").create(taskRun);
        test.close();
    }
}
}

1 Ответ

0 голосов
/ 02 марта 2020

Tekton поставляется с контроллером доступа, который проверяет спецификации CRD, прежде чем допустить их в кластер. Поскольку проект все еще в альфа-версии, он движется довольно быстро. Fabric8 может шаблонизировать объекты K8s с другими значениями c от того, что было установлено в вашем кластере. Вы должны быть в состоянии проверить версию spe c, используемую в Fabric8, удалить все объекты Tekton в вашем кластере и повторно применить их в указанной c версии.

...