bg-circuit-vertical

Headache-free CI/CD Pipelines.

Codefresh helps you build powerful, fast, and simple CI/CD pipelines.

Device flat

Teams that love Codefresh

TBS Unicef Citrix Steelhouse Bosch
Toolkit

A complete toolkit to integrate and deliver software

Each step in a Codefresh CI/CD pipeline is its own container, enabling unparalleled speed, modularity, and flexibilty. And with our built-in steps library, you can create a full-fledged pipeline in minutes. From performing a canary release in Kubernetes to building an iOS app, you can create a pipeline that does just about anything in minutes.

Show me a pipeline for:
  • Kubernetes Kubernetes
  • Helm Helm
  • Terraform Terraform
  • Android Android
  • Plain Plain Deployment Jar
  • Serverless Serverless
Cloning main repository
main_clone:
    title: Cloning main repository...
    type: git-clone
    repo: '${{CF_REPO_OWNER}}/${{CF_REPO_NAME}}'
    revision: '${{CF_REVISION}}'
Building docker image
BuildDockerImage:
    title: 'Building dockerImage'
    type: build
    image_name: containers101/demochat
    dockerfile: Dockerfile
    tag: '${{CF_BRANCH_TAG_NORMALIZED}}-${{CF_SHORT_REVISION}}'
Unit tests
MyUnitTests:
    title: 'Unit Tests'
    image: '${{BuildDockerImage}}'
    commands:
        - 'npm run test'
Creating environment and deploy
DeployStaging:
    title: 'Creating environment and deploy'
    type: deploy
    kind: kubernetes
    cluster: my-k8s-cluster
    namespace: staging
    service: demochat-app
    candidate:
        image: '${{BuildDockerImage}}'
        registry: cfcr
Integration tests
MyIntegrationTests:
    title: 'Unit Tests'
    image: '${{BuildDockerImage}}'
    commands:
        - 'npm run integration-test'
Security scans
CheckClair:
    title: 'Security scans'
    image: 'codefresh/cfstep-paclair:3.1.0'
    environment:
        - CF_ACCOUNT=containers101
        - 'IMAGE=''${{BuildDockerImage:}}'''
        - 'TAG=''${{CF_BRANCH_TAG_NORMALIZED}}-${{CF_SHORT_REVISION}}'''
Canary release
canaryDeploy:
    title: 'Canary release'
    image: 'codefresh/k8s-canary:master'
    environment:
        - WORKING_VOLUME=.
        - SERVICE_NAME=demochat-app
        - DEPLOYMENT_NAME=demochat-app
        - TRAFFIC_INCREMENT=20
        - 'NEW_VERSION=${{CF_SHORT_REVISION}}'
        - SLEEP_SECONDS=40
        - NAMESPACE=production
        - KUBE_CONTEXT=my-prod-k8s-cluster
Healthcheck
CheckService:
    title: Healthcheck
    image: byrnedo/alpine-curl
    cmd:
        - 'http://prod.example.com/my-app'
Cloning main repository
main_clone:
    title: Cloning main repository...
    type: git-clone
    repo: '${{CF_REPO_OWNER}}/${{CF_REPO_NAME}}'
    revision: '${{CF_REVISION}}'
Building docker image
BuildDockerImage:
    title: 'Building dockerImage'
    type: build
    image_name: containers101/demochat
    dockerfile: Dockerfile
    tag: '${{CF_BRANCH_TAG_NORMALIZED}}-${{CF_SHORT_REVISION}}'
Store Helm chart
StoreChart:
    title: 'Storing Helm chart'
    stage: deploy
    image: 'codefresh/cfstep-helm:2.12.3'
    environment:
        - ACTION=push
        - CHART_REF=charts/helm-example
Deploy Helm chart
DeployMyChart:
    image: 'codefresh/cfstep-helm:2.12.3'
    title: 'Deploying Helm chart'
    stage: deploy
    environment:
        - CHART_REF=charts/helm-example
        - RELEASE_NAME=my-go-chart-prod
        - KUBE_CONTEXT=my-demo-k8s-cluster
        - VALUE_image_pullPolicy=Always
        - 'VALUE_image_tag=''multi-stage'''
        - VALUE_replicaCount=3
Cloning main repository
main_clone:
    title: Cloning main repository...
    type: git-clone
    repo: '${{CF_REPO_OWNER}}/${{CF_REPO_NAME}}'
    revision: '${{CF_REVISION}}'
Show Terraform plan
DeployWithTerraform:
    image: 'hashicorp/terraform:0.12.0'
    title: 'Deploying Terraform plan'
    stage: deploy
    commands:
        - 'terraform init'
        - 'terraform plan'
Approve plan
askForPermission:
    type: pending-approval
    title: 'Is the terraform plan ok?'
Apply plan
DeployWithTerraform:
    image: 'hashicorp/terraform:0.12.0'
    title: 'Deploying Terraform plan'
    stage: deploy
    commands:
        - 'terraform apply -auto-approve'
Cloning main repository
main_clone:
    title: Cloning main repository...
    type: git-clone
    repo: '${{CF_REPO_OWNER}}/${{CF_REPO_NAME}}'
    revision: '${{CF_REVISION}}'
Run tests
RunMyTests:
    title: 'Running Tests'
    stage: test
    image: 'nextcloudci/android:android-40'
    commands:
        - './gradlew test --no-daemon --gradle-user-home=/codefresh/volume/.gradle'
Package application
PackageMyApp:
    title: 'Packaging Android App'
    stage: package
    image: 'nextcloudci/android:android-40'
    commands:
        - './gradlew build  --no-daemon --gradle-user-home=/codefresh/volume/.gradle'
Cloning main repository
main_clone:
    title: Cloning main repository...
    type: git-clone
    repo: '${{CF_REPO_OWNER}}/${{CF_REPO_NAME}}'
    revision: '${{CF_REVISION}}'
Package application
MyUnitTests:
    title: 'Compile/Unit test'
    stage: test
    image: 'maven:3.5.2-jdk-8-alpine'
    commands:
        - 'mvn -Dmaven.repo.local=/codefresh/volume/m2_repository package'
Upload to S3
S3UploadStep:
    title: 'Copying Jar file to S3'
    image: mesosphere/aws-cli
    commands:
        - 'aws s3 sync ./target/*.jar s3://${{S3_BUCKETNAME}}/jar-uploads --delete'
Cloning main repository
main_clone:
    title: Cloning main repository...
    type: git-clone
    repo: '${{CF_REPO_OWNER}}/${{CF_REPO_NAME}}'
    revision: '${{CF_REVISION}}'
Unit Tests
test:
    image: 'node:10-alpine'
    title: 'lint and test'
    commands:
        - 'yarn lint'
        - 'yarn test'
Package
package:
    image: 'codefresh/serverless:1.28'
    title: 'package serverless service'
    working_directory: '${{main_clone}}/examples/aws-node-simple-http-endpoint'
    commands:
        - 'serverless package --stage ${AWS_STAGE} --region ${AWS_REGION} --package ${PACKAGE}'
Deploy
deploy:
    image: 'codefresh/serverless:1.28'
    title: 'deploy to AWS with serverless framework'
    working_directory: '${{main_clone}}/examples/aws-node-simple-http-endpoint'
    commands:
        - 'serverless deploy --conceal --verbose --stage ${AWS_STAGE} --region ${AWS_REGION} --aws-profile ${AWS_PROFILE} --package ${PACKAGE}'
Integration tests
integration:
    image: 'codefresh/serverless:1.28'
    title: 'run integration test'
    working_directory: '${{main_clone}}/examples/aws-node-simple-http-endpoint'
    fail_fast: false
    commands:
        - 'serverless invoke --function currentTime --stage ${AWS_STAGE} --region ${AWS_REGION} --path test/data.json && cf_export INTEGRATION_FAILED=false || cf_export INTEGRATION_FAILED=true'
Rollback
rollback:
    image: 'codefresh/serverless:1.28'
    title: 'rollback if integration test failed'
    working_directory: '${{main_clone}}/examples/aws-node-simple-http-endpoint'
    commands:
        - '${INTEGRATION_FAILED} && echo "rollback to previous version on error" || true'
        - '${INTEGRATION_FAILED} && if [ ! -z "${KEEP_VERSION}" ]; then serverless rollback --verbose --timestamp ${KEEP_VERSION} --region ${AWS_REGION} --stage ${AWS_STAGE} --aws-profile ${AWS_PROFILE}; fi || true'
Cleanup
cleanup:
    image: 'codefresh/serverless:1.28'
    title: 'cleanup allocated resources'
    working_directory: '${{main_clone}}/examples/aws-node-simple-http-endpoint'
    commands:
        - 'serverless remove --verbose --region ${AWS_REGION} --stage ${AWS_STAGE} --aws-profile ${AWS_PROFILE}'

Words from satisfied users.

Our test cycle went from three days to three hours.
We felt like we found someone who really understands docker.
In Codefresh, to be able to look at a pull-request, and spin up an environment is super valuable.

There’s a step for that.

Codefresh has tons of build-in steps for most common use cases to make creating pipelines easier than ever. Need to do something uncommon? You can run any container from registries like Docker Hub, or run your own custom container as a step for unparalleled flexibility.

View all steps
Codefresh pipeline Freestyle SMS Twilio Webhook Push image Lambda npm
Codefresh pipeline Freestyle SMS Twilio Webhook Push image Lambda npm
Twistlock Docker image Slack message Helmchart SCP Bintray Aqua
Twistlock Docker image Slack message Helmchart SCP Bintray Aqua
Github Deploy Kubernetes Docker compose Canary Hashicorp GKE Deploy ECS
Github Deploy Kubernetes Docker compose Canary Hashicorp GKE Deploy ECS
Wave separation

Flexible Deployment Options

Cloud

Cloud-hosted

We’ll take care of hosting and scaling all of Codefresh on our highly-available infrastructure.

Hydrid

Hybrid

We’re flexible—run builds on your infrastructure, and we’ll take care of the Codefresh frontend.

Self-hosted

Self-hosted

Run the entire Codefresh stack on-premise or on your own infrastructure.

Wave separation

Get a head start on building better pipelines!

Schedule a demo with a Codefresh expert today.