func/pipelines/tekton/tasks.go

116 lines
3.4 KiB
Go

package tekton
import (
"fmt"
pplnv1beta1 "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1"
)
const (
taskNameFetchSources = "fetch-sources"
taskNameBuild = "build"
taskNameDeploy = "deploy"
)
func taskFetchSources() pplnv1beta1.PipelineTask {
return pplnv1beta1.PipelineTask{
Name: taskNameFetchSources,
TaskRef: &pplnv1beta1.TaskRef{
Name: "git-clone",
},
Workspaces: []pplnv1beta1.WorkspacePipelineTaskBinding{{
Name: "output",
Workspace: "source-workspace",
}},
Params: []pplnv1beta1.Param{
{Name: "url", Value: *pplnv1beta1.NewArrayOrString("$(params.gitRepository)")},
{Name: "revision", Value: *pplnv1beta1.NewArrayOrString("$(params.gitRevision)")},
},
}
}
func taskBuildpacks(runAfter string) pplnv1beta1.PipelineTask {
return pplnv1beta1.PipelineTask{
Name: taskNameBuild,
TaskRef: &pplnv1beta1.TaskRef{
Name: "func-buildpacks",
},
RunAfter: []string{runAfter},
Workspaces: []pplnv1beta1.WorkspacePipelineTaskBinding{
{
Name: "source",
Workspace: "source-workspace",
},
{
Name: "cache",
Workspace: "cache-workspace",
},
{
Name: "dockerconfig",
Workspace: "dockerconfig-workspace",
}},
Params: []pplnv1beta1.Param{
{Name: "APP_IMAGE", Value: *pplnv1beta1.NewArrayOrString("$(params.imageName)")},
{Name: "SOURCE_SUBPATH", Value: *pplnv1beta1.NewArrayOrString("$(params.contextDir)")},
{Name: "BUILDER_IMAGE", Value: *pplnv1beta1.NewArrayOrString("$(params.builderImage)")},
{Name: "ENV_VARS", Value: pplnv1beta1.ArrayOrString{
Type: pplnv1beta1.ParamTypeArray,
ArrayVal: []string{"$(params.buildEnvs[*])"},
}},
},
}
}
func taskS2iBuild(runAfter string) pplnv1beta1.PipelineTask {
params := []pplnv1beta1.Param{
{Name: "IMAGE", Value: *pplnv1beta1.NewArrayOrString("$(params.imageName)")},
{Name: "PATH_CONTEXT", Value: *pplnv1beta1.NewArrayOrString("$(params.contextDir)")},
{Name: "BUILDER_IMAGE", Value: *pplnv1beta1.NewArrayOrString("$(params.builderImage)")},
{Name: "ENV_VARS", Value: pplnv1beta1.ArrayOrString{
Type: pplnv1beta1.ParamTypeArray,
ArrayVal: []string{"$(params.buildEnvs[*])"},
}},
}
return pplnv1beta1.PipelineTask{
Name: taskNameBuild,
TaskRef: &pplnv1beta1.TaskRef{
Name: "func-s2i",
},
RunAfter: []string{runAfter},
Workspaces: []pplnv1beta1.WorkspacePipelineTaskBinding{
{
Name: "source",
Workspace: "source-workspace",
},
{
Name: "dockerconfig",
Workspace: "dockerconfig-workspace",
}},
Params: params,
}
}
func taskDeploy(runAfter string, referenceImageFromPreviousTaskResults bool) pplnv1beta1.PipelineTask {
params := []pplnv1beta1.Param{{Name: "path", Value: *pplnv1beta1.NewArrayOrString("$(workspaces.source.path)/$(params.contextDir)")}}
// Deploy step that uses an image produced by S2I builds needs explicit reference to the image
if referenceImageFromPreviousTaskResults {
params = append(params, pplnv1beta1.Param{Name: "image", Value: *pplnv1beta1.NewArrayOrString(fmt.Sprintf("$(params.imageName)@$(tasks.%s.results.IMAGE_DIGEST)", runAfter))})
}
return pplnv1beta1.PipelineTask{
Name: taskNameDeploy,
TaskRef: &pplnv1beta1.TaskRef{
Name: "func-deploy",
},
RunAfter: []string{runAfter},
Workspaces: []pplnv1beta1.WorkspacePipelineTaskBinding{{
Name: "source",
Workspace: "source-workspace",
}},
Params: params,
}
}