Overall Architecture
Screwdriver is a collection of services that facilitate the workflow for Continuous Delivery pipelines.
Workflow
-
Commit new code
User starts a new build by one of the following operations:
- User pushes code to SCM
- User opens a new pull request on SCM
- User pushes code to SCM on an open pull request
- User tells Screwdriver (via API or UI) to rebuild a given commit
-
Notify Screwdriver
Signed webhooks notify Screwdriver’s API about the change.
-
Trigger execution engine
Screwdriver starts a job on the specified execution engine passing the user’s configuration and git information.
-
Build software
Screwdriver’s Launcher executes the commands specified in the user’s configuration after checking out the source code from git inside the desired container.
-
Publish artifacts (optional)
User can optionally push produced artifacts to respective artifact repositories (RPMs, Docker images, Node Modules, etc.).
-
Continue pipeline
On completion of the job, Screwdriver’s Launcher notifies the API and if there’s more in the pipeline, the API triggers the next job on the execution engine (
GOTO:3
).
Components
Screwdriver consists of five main components, the first three of which are built/maintained by Screwdriver:
-
REST API
RESTful interface for creating, monitoring, and interacting with pipelines.
-
Web UI
Human consumable interface for the REST API.
-
Launcher
Self-contained tool to clone, setup the environment, and execute the shell commands defined in your job.
-
Execution Engine
Pluggable build executor that supports executing commands inside of a container (e.g. Jenkins, Kubernetes, Nomad, and Docker).
-
Datastore
Pluggable storage for keeping information about pipelines (e.g. Postgres, MySQL, and Sqlite).
Reference Architecture in AWS
Screwdriver application components are running in a Kubernetes environment in AWS. Builds are also launched in same Kubernetes environment under a different namespace. Example environment https://cd.screwdriver.cd/