• Stars
    star
    1,015
  • Rank 45,318 (Top 0.9 %)
  • Language
    JavaScript
  • License
    Other
  • Created over 8 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An open source build platform designed for continuous delivery.

Screwdriver API

Version Pulls Stars Build Status Open Issues Coverage Vulnerabilities License Slack CII Best Practices

API for the Screwdriver CD service

Screwdriver is a self-contained, pluggable service to help you build, test, and continuously deliver software using the latest containerization technologies.

Table of Contents

Background

Screwdriver began as a hack for simplified interfacing with Jenkins at Yahoo in 2012. As the volume of builds increased, it became clear that Jenkins was not stable or feasible to use at the scale we were running builds. In 2016, we rebuilt Screwdriver from scratch in open source with our best coding practices and CICD goals in mind. Screwdriver is executor and SCM-agnostic, meaning you can choose whichever plugin better suits your need or build your own. It's completely free and open source, and our team is actively maintaining the code.

For more information about Screwdriver, check out our homepage.

Installation and Usage

Plugins

This API comes preloaded with 16 (sixteen) resources:

Three (3) option for datastores:

  • Postgres, MySQL, and Sqlite (sequelize)

Three (3) options for executor:

  • Kubernetes (k8s)
  • Docker (docker)
  • Nomad (nomad)

Three (3) options for SCM:

  • GitHub (github)
  • GitLab (gitlab)
  • Bitbucket (bitbucket)

Prerequisites

To use Screwdriver, you will need the following prerequisites:

From Source

$ git clone [email protected]:screwdriver-cd/screwdriver.git ./
$ npm install
$ vim ./config/local.yaml # See below for configuration
$ npm start
info: Server running at http://localhost:8080

From a Prebuilt Docker image

$ vim ./local.yaml # See below for configuration
$ docker run --rm -it --volume=`pwd`/local.yaml:/config/local.yaml -p 8080 screwdrivercd/screwdriver:stable
info: Server running at http://localhost:8080

Using In-A-Box

Our in-a-box script brings up an entire Screwdriver instance (ui, api, and log store) locally for you to play with. Follow instructions at https://github.com/screwdriver-cd/in-a-box#screwdriver-in-a-box.

Using Helm

This chart bootstraps the whole Screwdriver ecosystem and also nginx ingress controller.

Configuration

Screwdriver already defaults most configuration, but you can override defaults using a local.yaml or environment variables.

To continue set up, follow the instructions for cluster management.

Yaml

Example overriding local.yaml:

executor:
    plugin: k8s
    k8s:
        options:
            kubernetes:
                host: kubernetes.default
                token: this-is-a-real-token
            launchVersion: stable

scms:
    github:
        plugin: github
        config:
            oauthClientId: totally-real-client-id
            oauthClientSecret: another-real-client-secret
            secret: a-really-real-secret
            username: sd-buildbot
            email: [email protected]

Environment

Example overriding with environment variables:

$ export K8S_HOST=127.0.0.1
$ export K8S_TOKEN=this-is-a-real-token
$ export SECRET_OAUTH_CLIENT_ID=totally-real-client-id
$ export SECRET_OAUTH_CLIENT_SECRET=another-real-client-secret

All the possible environment variables are defined here.

Testing

Unit Tests

npm test

Note: You might run into memory issues running all the unit tests. You can update your ~/.bashrc file with the line below to ensure there's enough memory for tests to run:

export NODE_OPTIONS=--max_old_space_size=4096

Functional tests

Fork functional-* repositories to your organization from screwdriver-cd-test

With .func_config

Add .func_config to the root of the Screwdriver API folder with your username, github token, access key, host, and organization for test:

GIT_TOKEN=YOUR-GITHUB-TOKEN
SD_API_TOKEN=YOUR-SD-API-TOKEN
SD_API_HOST=YOUR-SD-API-HOST
SD_API_PROTOCOL=PROTOCOL-FOR-SD-API // e.g.PROTOCOL=http; by default it is https
TEST_ORG=YOUR-TEST-ORGANIZATION
TEST_USERNAME=YOUR-GITHUB-USERNAME
TEST_SCM_HOSTNAME=YOUR-TEST-SCM-HOSTNAME // e.g. TEST_SCM_HOSTNAME=mygithub.com; by default it is github.com
TEST_SCM_CONTEXT=YOUR-TEST-SCM-CONTEXT // e.g.TEST_SCM_CONTEXT=bitbucket; by default it is github

With environment variables

Set the environment variables:

$ export GIT_TOKEN=YOUR-GITHUB-TOKEN
$ export SD_API_TOKEN=YOUR-SD-API-TOKEN
$ export SD_API_HOST=YOUR-SD-API-HOST
$ export SD_API_PROTOCOL=PROTOCOL-FOR-SD-API
$ export TEST_ORG=YOUR-TEST-ORGANIZATION
$ export TEST_USERNAME=YOUR-GITHUB-USERNAME
$ export TEST_SCM_HOSTNAME=YOUR-TEST-SCM-HOSTNAME
$ export TEST_SCM_CONTEXT=YOUR-TEST-SCM-CONTEXT

Then run the cucumber tests:

npm run functional

Contribute

To start contributing to Screwdriver, have a look at our guidelines, as well as pointers on where to start making changes, in our contributing guide.

License

Code licensed under the BSD 3-Clause license. See LICENSE file for terms.

More Repositories

1

guide

Screwdriver.cd Documentation
Ruby
139
star
2

gitversion

A helper for bumping versions via git tags.
Go
31
star
3

ui

Screwdriver UI
JavaScript
25
star
4

launcher

The entrypoint for job launching in Screwdriver
Go
13
star
5

meta-cli

CLI for reading/writing information from the metadata
Go
8
star
6

models

Screwdriver Models
JavaScript
7
star
7

scm-gitlab

Gitlab implementation of the scm-base class
JavaScript
6
star
8

toolbox

Central repository for handy Screwdriver-related scripts and other tools
Shell
5
star
9

data-schema

Screwdriver internal data schema
JavaScript
5
star
10

screwdriver-chart

Kubernetes helm chart for deploying the whole Screwdriver ecosystem
Mustache
5
star
11

config-parser

Node module for parsing screwdriver.yaml configurations
JavaScript
4
star
12

executor-k8s

Kubernetes Executor for Screwdriver
JavaScript
4
star
13

in-a-box

Quick script to get Screwdriver running locally
Python
4
star
14

log-service

Sidecar for reading logs from the Launcher and uploading to the Store
Go
3
star
15

client

Screwdriver CLI
Go
3
star
16

store

Pluggable Artifact Store (for logs, shared steps, templates, etc).
JavaScript
3
star
17

executor-jenkins

Jenkins Executor for Screwdriver
JavaScript
3
star
18

template-main

Validates templates
JavaScript
2
star
19

coverage-sonar

SonarQube implementation of the coverage-base class
JavaScript
2
star
20

notifications-slack

Plugin to send Screwdriver build notifications
JavaScript
2
star
21

circuit-fuses

Wrapper around node-circuitbreaker to define a simple callback interface
JavaScript
2
star
22

sd-step

Go
2
star
23

executor-docker

Docker Executor for Screwdriver
JavaScript
2
star
24

store-cli

CLI for communicating with store
Go
2
star
25

sd-local

Screwdriver local mode
Go
2
star
26

scm-github

Github implementation of the scm-base class
JavaScript
2
star
27

notifications-email

Sends email notifications on certain build events.
JavaScript
2
star
28

datastore-sequelize

Datastore implementation for mysql, postgres, sqlite3 and mssql
JavaScript
1
star
29

scm-base

Base class defining the interface for source control implementations
JavaScript
1
star
30

tmpl-semantic-release

1
star
31

homepage

Screwdriver.cd homepage
JavaScript
1
star
32

generator-screwdriver

Yeoman generator for building Screwdriver Node Modules
JavaScript
1
star
33

marketplace

Shared Templates & Commands
1
star
34

hyperctl-image

This repo creates a minimal docker image containing hyperctl and k8s-vm scripts.
Shell
1
star
35

sd-cmd

Screwdriver commands (Sharing Binaries)
Go
1
star
36

executor-k8s-vm

Kubernetes VM Executor for Screwdriver
JavaScript
1
star
37

python-templates

Collection of templates for Python programming with Screwdriver
Shell
1
star