使用Tekton创建CI管道(第2/2部分)

2020-05-03 21:33:18

在这篇博客文章中,我们将继续与Tekton一起创建CI渠道。在第1部分中,我们在本地类型集群上安装了Tekton,并定义了我们的第一个任务,该任务克隆GitHub存储库并运行Go应用程序(Repo)的应用程序测试。

在这一部分中,我们将创建一个Task,该任务将为Go应用程序构建Docker映像,并将其推送到DockerHub。之后,我们将把我们的任务组合成一条管道。

为了构建和推送我们的Docker镜像,我们使用Kaniko,它可以在Kubernetes集群内构建Docker镜像,而不依赖于Docker守护进程。

Kaniko将在同一命令中构建和推送映像。这意味着在运行我们的任务之前,我们需要为DockerHub设置凭据,以便可以将坞站映像推送到注册表。

凭证保存在Kubernetes Secret中。使用以下内容创建名为Secret.yaml的文件,并将myusername和mypassword替换为您的DockerHub凭据:

注意元数据中的tekton.dev/docker-0注释,它告诉Tekton这些凭据所属的Docker注册表。

接下来,我们创建一个ServiceAccount,它使用Basic-User-Pass Secret。创建名为serviceaccount t.yaml的文件,其内容如下:

现在,通过指定serviceAccountName,我们可以在运行Tekton任务或管道时使用此ServiceAccount(名为build-bot)。我们将在下面看到这方面的示例。

现在已经设置了凭据,我们可以继续创建将构建和推送Docker映像的任务。

apiVersion:tekton.dev/v1beta1种类:任务元数据:名称:构建并推送规范:资源:输入:-名称:repo类型:GIT步骤:-名称:构建并推送映像:gcr.io/kaniko-project/Executor:v0.19.0 env:-name:docker_config value:/tekton/home/.docker命令:-/kaniko/Executor--dockerfile=Docker。

与第一个任务类似,此任务接受git repo作为输入(输入名称为repo),并且只包含一个步骤,因为Kaniko在同一命令中构建和推送映像。

确保创建一个DockerHub存储库,并将arthurk/tekton-test替换为您的存储库名称。在本例中,它将始终标记并推送具有最新标记的图像。

tekton支持参数,以避免像这样硬编码值。不过,为了使本教程简单,我省略了它们。

Kaniko需要docker_config env var才能找到Docker凭据。

有两种方法可以测试此任务,一种是手动创建TaskRun定义,然后使用kubectl应用它,另一种是使用Tekton CLI(TKN)。

为了使用kubectl运行Task,我们创建了一个TaskRun,该TaskRun看起来与前面的TaskRun完全相同,只是我们现在指定了一个ServiceAccount(ServiceAccountName)在执行任务时使用。

apiVersion:tekton.dev/v1beta1Kind:TaskRunMetadata:Name:Build-and-Push spec:serviceAccountName:Build-bot taskRef:Name:Build-and-Push Resources:Input:-Name:repo ResourceRef:Name:arthurk-tekton-Example。

通过列出所有以任务名称Build-and-Push开头的Pod来应用任务并检查Pod的日志:

$kubectl Apply-f taskrun-build-push.yamltaskrun.tekton.dev/build-and-push创建$kubectl get pod|grep构建并推送pod-c698q 2/2运行0 4s$kubectl日志--所有容器构建并推送-pod-c698q--关注{";level";:";info";,";ts";:1588478267.3476844,";caller";:";creds-init/main.go:44";,";msg";:";Credentials initialized.";}{";level";:";info";,";ts";:1588478279.2681644,";调用者";:";git/git.go:136";,";msg";:";成功.。

使用Tekton CLI运行任务更加方便。只需一个命令,它就可以从任务定义生成TaskRun清单,应用它,并跟踪日志。

$TKN任务开始构建并推送--inputresource repo=arthurk-tekton-example--服务帐户构建-bot--showlog任务运行已启动:构建并推送-运行-ctjvv正在等待日志为available.[git-source-arthurk-tekton-example-p9zxz]{";level";:";info";,";ts";:1588479279.271127,";调用者";:";git/gitvWaiting{";Level";:";info";,";ts";:1588479279.271127,";调用者";:";git/git。:";成功克隆https://github.com/arthurk/tekton-example@301aeaa8f7fa6ec01218ba6c5ddf9095b24d5d98.。

后台发生的情况类似于我们在上一节中对kubectl所做的操作,但这一次我们只需要运行一个命令。

现在我们已经准备好了两个任务(测试、构建和推送),我们可以创建一个按顺序运行它们的管道:首先,它将运行应用程序测试,如果通过,它将构建Docker映像并将其推送到DockerHub。

apiVersion:tekton.dev/v1beta1ind:Pipelinemetadata:name:test-build-push spec:resources:-name:repo类型:Git任务:#运行应用程序测试-name:test taskRef:name:test resources:input:-name:repo