Shipwright - a framework for building container images on Kubernetes
Shipwright is an extensible framework for building container images on Kubernetes.
Why?
With Shipwright, developers get a simplified approach for building container images, by defining a minimal YAML that does not require any previous knowledge of containers or container tooling. All you need is your source code in git and access to a container registry.
Shipwright supports any tool that can build container images in Kubernetes clusters, such as:
Try It!
- We assume you already have a Kubernetes cluster (v1.34+). If you don't, you can use KinD, which you can install by running
./hack/install-kind.sh.
- We also require a Tekton installation (v1.3+). To install the latest LTS release, run:
kubectl apply --filename https://infra.tekton.dev/tekton-releases/pipeline/previous/v1.12.0/release.yaml
If you are using OpenShift cluster refer Running on OpenShift for some more configurations.
- Install the Shipwright deployment. To install the latest version, run:
kubectl apply --filename https://github.com/shipwright-io/build/releases/download/v0.18.4/release.yaml --server-side
curl --silent --location https://raw.githubusercontent.com/shipwright-io/build/v0.18.4/hack/setup-webhook-cert.sh | bash
curl --silent --location https://raw.githubusercontent.com/shipwright-io/build/v0.18.4/hack/storage-version-migration.sh | bash
To install the latest nightly release, run:
kubectl apply --filename "https://github.com/shipwright-io/build/releases/download/nightly/nightly-$(curl --silent --location https://github.com/shipwright-io/build/releases/download/nightly/latest.txt).yaml" --server-side
curl --silent --location https://raw.githubusercontent.com/shipwright-io/build/main/hack/setup-webhook-cert.sh | bash
curl --silent --location https://raw.githubusercontent.com/shipwright-io/build/main/hack/storage-version-migration.sh | bash
- Install the Shipwright strategies. To install the latest version, run:
kubectl apply --filename https://github.com/shipwright-io/build/releases/download/v0.18.4/sample-strategies.yaml --server-side
To install the latest nightly release, run:
kubectl apply --filename "https://github.com/shipwright-io/build/releases/download/nightly/nightly-$(curl --silent --location https://github.com/shipwright-io/build/releases/download/nightly/latest.txt)-sample-strategies.yaml" --server-side
- Generate a secret to access your container registry, such as one on Docker Hub or Quay.io:
REGISTRYSERVER=https://index.docker.io/v1/ REGISTRYUSER=<yourregistryuser> REGISTRYPASSWORD=<yourregistry_password>
kubectl create secret docker-registry push-secret \
--docker-server=$REGISTRY_SERVER \
--docker-username=$REGISTRY_USER \
--docker-password=$REGISTRY_PASSWORD \
--docker-email=<your_email>
- Create a Build object, replacing
<REGISTRY_ORG>with the registry username yourpush-secretsecret have access to:
REGISTRYORG=<yourregistry_org>
cat <<EOF | kubectl apply -f -
apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
name: buildpack-nodejs-build
spec:
source:
type: Git
git:
url: https://github.com/shipwright-io/sample-nodejs
contextDir: source-build
strategy:
name: buildpacks-v3
kind: ClusterBuildStrategy
output:
image: docker.io/${REGISTRY_ORG}/sample-nodejs:latest
pushSecret: push-secret
EOF
To view the Build which you just created:
$ kubectl get builds
NAME REGISTERED REASON BUILDSTRATEGYKIND BUILDSTRATEGYNAME CREATIONTIME
buildpack-nodejs-build True Succeeded ClusterBuildStrategy buildpacks-v3 68s
- Submit your BuildRun:
cat <<EOF | kubectl create -f -
apiVersion: shipwright.io/v1beta1
kind: BuildRun
metadata:
generateName: buildpack-nodejs-buildrun-
spec:
build:
name: buildpack-nodejs-build
EOF
- Wait until your BuildRun is completed and then you can view it as follows:
$ kubectl get buildruns
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME
buildpack-nodejs-buildrun-xyzds True Succeeded 69s 2s
or
kubectl get buildrun --output name | xargs kubectl wait --for=condition=Succeeded --timeout=180s
- After your BuildRun is completed, check your container registry, you will find the new generated image uploaded there.
Running on OpenShift
If you are running on OpenShift and if the pipeline service account isn't already created, here are the steps to create the same:
oc create serviceaccount pipeline
oc adm policy add-scc-to-user privileged -z pipeline
oc adm policy add-role-to-user edit -z pipeline
Please tell us more!
Depending on your source code, you might want to build it differently with Shipwright.
To find out more on what's the best strategy or what else can Shipwright do for you, please visit our tutorial!
More information
Read the Docs
| Version | Docs | Examples | |------------------------------------------------------------------------|----------------------------------------------------------------------------|-----------------------------------------------------------------------------------| | HEAD | Docs @ HEAD | Examples @ HEAD | | v0.18.4 | Docs @ v0.18.4 | Examples @ v0.18.4 | | v0.18.3 | Docs @ v0.18.3 | Examples @ v0.18.3 | | v0.18.2 | Docs @ v0.18.2 | Examples @ v0.18.2 | | v0.18.1 | Docs @ v0.18.1 | Examples @ v0.18.1 | | v0.18.0 | Docs @ v0.18.0 | Examples @ v0.18.0 | | v0.17.4 | Docs @ v0.17.4 | Examples @ v0.17.4 | | v0.17.3 | Docs @ v0.17.3 | Examples @ v0.17.3 | | v0.17.2 | Docs @ v0.17.2 | Examples @ v0.17.2 | | v0.17.1 | Docs @ v0.17.1 | Examples @ v0.17.1 | | v0.17.0 | Docs @ v0.17.0 | Examples @ v0.17.0 | | v0.16.13 | Docs @ v0.16.13 | Examples @ v0.16.13 | | v0.16.12 | Docs @ v0.16.12 | Examples @ v0.16.12 | | v0.16.11 | Docs @ v0.16.11 | Examples @ v0.16.11 | | v0.16.10 | Docs @ v0.16.10 | Examples @ v0.16.10 | | v0.16.9 | Docs @ v0.16.9 | Examples @ v0.16.9 | | v0.16.8 | Docs @ v0.16.8 | Examples @ v0.16.8 | | v0.16.7 | Docs @ v0.16.7 | Examples @ v0.16.7 | | v0.16.6 | Docs @ v0.16.6 | Examples @ v0.16.6 | | v0.16.5 | Docs @ v0.16.5 | Examples @ v0.16.5 | | v0.16.4 | Docs @ v0.16.4 | Examples @ v0.16.4 | | v0.16.3 | Docs @ v0.16.3 | Examples @ v0.16.3 | | v0.16.2 | Docs @ v0.16.2 | Examples @ v0.16.2 | | v0.16.1 | Docs @ v0.16.1 | Examples @ v0.16.1 | | v0.16.0 | Docs @ v0.16.0 | Examples @ v0.16.0 | | v0.15.9 | Docs @ v0.15.9 | Examples @ v0.15.9 | | v0.15.8 | Docs @ v0.15.8 | Examples @ v0.15.8 | | v0.15.7 | Docs @ v0.15.7 | Examples @ v0.15.7 | | v0.15.6 | Docs @ v0.15.6 | Examples @ v0.15.6 | | v0.15.5 | Docs @ v0.15.5 | Examples @ v0.15.5 | | v0.15.4 | Docs @ v0.15.4 | Examples @ v0.15.4 | | v0.15.3 | Docs @ v0.15.3 | Examples @ v0.15.3 | | v0.15.2 | Docs @ v0.15.2 | Examples @ v0.15.2 | | v0.15.1 | Docs @ v0.15.1 | Examples @ v0.15.1 | | v0.15.0 | Docs @ v0.15.0 | Examples @ v0.15.0 | | v0.14.4 | Docs @ v0.14.4 | Examples @ v0.14.4 | | v0.14.3 | Docs @ v0.14.3 | Examples @ v0.14.3 | | v0.14.2 | Docs @ v0.14.2 | Examples @ v0.14.2 | | v0.14.1 | Docs @ v0.14.1 | Examples @ v0.14.1 | | v0.14.0 | Docs @ v0.14.0 | Examples @ v0.14.0 | | v0.13.0 | Docs @ v0.13.0 | Examples @ v0.13.0 | | v0.12.0 | Docs @ v0.12.0 | Examples @ v0.12.0 | | v0.11.0 | Docs @ v0.11.0 | Examples @ v0.11.0 | | v0.10.0 | Docs @ v0.10.0 | Examples @ v0.10.0 | | v0.9.0 | Docs @ v0.9.0 | Examples @ v0.9.0 | | v0.8.0 | Docs @ v0.8.0 | Examples @ v0.8.0 | | v0.7.0 | Docs @ v0.7.0 | Examples @ v0.7.0 | | v0.6.0 | Docs @ v0.6.0 | Examples @ v0.6.0 | | v0.5.1 | Docs @ v0.5.1 | Examples @ v0.5.1 | | v0.5.0 | Docs @ v0.5.0 | Examples @ v0.5.0 | | v0.4.0 | Docs @ v0.4.0 | Examples @ v0.4.0 | | v0.3.0 | Docs @ v0.3.0 | Examples @ v0.3.0 | | v0.2.0 | Docs @ v0.2.0 | Examples @ v0.2.0 | | v0.1.1 | Docs @ v0.1.1 | Examples @ v0.1.1 | | v0.1.0 | Docs @ v0.1.0 | Examples @ v0.1.0 |
Dependencies
| Dependency | Supported versions | |--------------------------------------|------------------------------| | Kubernetes | v1.34.\, v1.35.\, v1.36.\*| | Tekton | v1.3.\, v1.6.\, v1.9.\, v1.12.\ |
Platform support
We are building container images of the Shipwright Build controller for all platforms supported by the base image that we are using which is registry.access.redhat.com/ubi10/ubi-minimal. Those are:
- linux/amd64
- linux/arm64
- linux/ppc64le
- linux/s390x
Our sample build strategies are all functional on linux/amd64. Their support on other platforms relies on the tools being used there to be available for other platforms. For detailed information, please see Available ClusterBuildStrategies.
Want to get involved?
Community meetings
We host weekly meetings for users, contributors, maintainers and anyone interested in the project. The weekly meetings take place on Mondays at 1pm UTC.
Note: To have a calendar invite, you can self-register via the Public Calendar meetings.Want to contribute
We are so excited to have you!
- See CONTRIBUTING.md for an overview of our processes.
- This community has a Code of Conduct, please make sure to follow it.
- See DEVELOPMENT.md for how to get started.
- See HACK.md for how to build, test & run
- Look at our
- Contact us:
Shipwright is a Cloud Native Computing Foundation (CNCF) Sandbox project.