diff --git a/documentation/docs/steps/dockerBuild.md b/documentation/docs/steps/dockerBuild.md new file mode 100644 index 0000000000..c24a3c6c5d --- /dev/null +++ b/documentation/docs/steps/dockerBuild.md @@ -0,0 +1,82 @@ +# ${docGenStepName} + +## ${docGenDescription} + +## Prerequisites + +This step is intended for use in **GitHub Actions**, where Docker + BuildKit are natively available on the runner. +It is not supported on Jenkins or Azure DevOps runners. + +When pushing to a container registry, you need to provide credentials via one of these approaches: + +* Pass `containerRegistryUser` and `containerRegistryPassword` parameters — the step will write a `config.json` automatically. +* Provide a pre-existing `config.json` via the `dockerConfigJSON` parameter. + +## ${docJenkinsPluginDependencies} + +## Example + +### Building a single image + +```yaml +steps: + dockerBuild: + containerImageName: myImage + containerRegistryUrl: my.registry.example.com + containerRegistryUser: myUser + containerRegistryPassword: myPassword +``` + +### Building multiple images from sub-directories + +```yaml +steps: + dockerBuild: + containerImageName: myImage + containerMultiImageBuild: true +``` + +With the following Dockerfiles present in the repository: + +* `sub1/Dockerfile` +* `sub2/Dockerfile` + +The following images will be built and pushed: + +* `myImage-sub1` +* `myImage-sub2` + +### Using registry mirrors + +```yaml +steps: + dockerBuild: + containerImageName: myImage + registryMirrors: + - mirror.gcr.io + - mycompany-docker-virtual.jfrog.io +``` + +### Enabling BOM creation + +```yaml +steps: + dockerBuild: + containerImageName: myImage + createBOM: true +``` + +### Opting in (replacing kanikoExecute) + +By default `kanikoExecute` is active and `dockerBuild` is off. To switch: + +```yaml +stages: + Build: + dockerBuild: true + kanikoExecute: false +``` + +## ${docGenParameters} + +## ${docGenConfiguration} diff --git a/documentation/docs/steps/kanikoExecute.md b/documentation/docs/steps/kanikoExecute.md index cceeb3c8ab..e45bf270cc 100644 --- a/documentation/docs/steps/kanikoExecute.md +++ b/documentation/docs/steps/kanikoExecute.md @@ -2,6 +2,9 @@ ## ${docGenDescription} +> **Note:** For pipelines running on **GitHub Actions**, consider using the [`dockerBuild`](dockerBuild.md) step instead. +> It uses Docker BuildKit natively and does not require a Kaniko sidecar container. + ## Prerequisites When pushing to a container registry, you need to maintain the respective credentials in your Jenkins credentials store: diff --git a/pkg/buildsettings/buildSettings.go b/pkg/buildsettings/buildSettings.go index 7717bd21e1..0e9bd2f85c 100644 --- a/pkg/buildsettings/buildSettings.go +++ b/pkg/buildsettings/buildSettings.go @@ -10,6 +10,7 @@ import ( ) type BuildSettings struct { + DockerBuild []BuildOptions `json:"dockerBuild,omitempty"` GolangBuild []BuildOptions `json:"golangBuild,omitempty"` GradleExecuteBuild []BuildOptions `json:"gradleExecuteBuild,omitempty"` HelmExecute []BuildOptions `json:"helmExecute,omitempty"` @@ -78,6 +79,10 @@ func CreateBuildSettingsInfo(config *BuildOptions, buildTool string) (string, er settings = append(settings, currentBuildSettingsInfo) var err error switch buildTool { + case "dockerBuild": + jsonResult, err = json.Marshal(BuildSettings{ + DockerBuild: settings, + }) case "golangBuild": jsonResult, err = json.Marshal(BuildSettings{ GolangBuild: settings, diff --git a/pkg/buildsettings/buildSettings_test.go b/pkg/buildsettings/buildSettings_test.go index 264d2145f2..00336ea655 100644 --- a/pkg/buildsettings/buildSettings_test.go +++ b/pkg/buildsettings/buildSettings_test.go @@ -69,6 +69,11 @@ func TestCreateBuildSettingsInfo(t *testing.T) { buildTool: "cnbBuild", expected: "{\"cnbBuild\":[{\"dockerImage\":\"builder:latest\"}]}", }, + { + config: BuildOptions{DockerImage: "docker:latest"}, + buildTool: "dockerBuild", + expected: "{\"dockerBuild\":[{\"dockerImage\":\"docker:latest\"}]}", + }, } for _, testCase := range testTableConfig {