Image for post
Image for post
The perfect CI for Serverless architectures (Image credits)

Serverless is a framework allowing you to deploy “functions” on various different cloud providers such as AWS Lambda or Google Cloud Functions in an easy & automated manner. Terraform allows you to automate the deployment of cloud-specific configurations such as AWS SNS topics, SQS queues, IAM roles, etc…

Terraform output

This article won’t go into the details of Terraform, you can read more in the documentation. The key point is that when “running” your Terraform, you will be able to return values: they are called outputs.

You can get the output variables as a JSON object by running this command:

$ terraform…

Image for post
Image for post
A monolith might be more appropriate

While working at Kamet, I’ve worked with many early-stage ventures. In this article, I will share my thoughts on different paths that startups can take regarding technical architectures.

I believe that a startup should prefer as much as possible a well-decoupled monolith than a micro-services architecture for as long as possible. Given the hype of the “functions” (i.e., serverless), it’s worth clarifying that they count as “micro-services” as they have almost the same characteristics (minus a bit of ops-headache).

Why are micro (functions or service) architectures so popular?

We can’t argue that they are super en vogue, probably because they are used successfully by a few global companies like…

A fair amount of times, while running react-native link [package] , I have seen the following error:

rnpm-install ERR! Something went wrong while linking. Error: Cannot read property ‘match’ of undefined

Every time, I’ve Googled it but did not find a satisfying answer and continued my way with manually linking the library. It turns out that all you need to do, is to add the following line in your Podfile after existing pod '[...] lines:

# Add new pods below this line

This comment is used by the “linking process” to know where to add the libraries’ pod(s) in your Podfile . So much thanks to LiuShuoyu for his comment on react-native ‘s repository.

Every single software has some “legacy”, somewhere. You (or someone else) did things differently to what you believe is best to do now. Refactoring is the art of increasing the maintainability of a piece of code.

No refactoring to do?

If you don’t have any refactoring to do, it’s very likely that you are either over-spending (i.e. you spend far too much time on quality for the sake of it) or you don’t realise that you could be much faster.

“Technical debt” is complete part of the development process and especially in fast-moving environments such as startups where the focus is more much on…

Let’s picture the scene. Your product is built on a mobile (or web) application and an API. Whether you are using a monolith repository or not, you will have two different applications your development team will work on: the front and the back.

Backward incompatible changes

Let’s be honest, changing both the Backend and the Frontend is great to very quickly prototype something. It’s also super easy to have one pull-request containing both changes if you use a monolith repository.

On the other hand… it means it’s very simple to introduce backward incompatible changes (also known as “BC breaks”). …

TL;DR: We have decided to open-source the entire codebase of ContinuousPipe. You can install ContinuousPipe on your Kubernetes cluster or get started with DockerCompose to explore and contribute.

Image for post
Image for post
ContinuousPipe is open-source!

We have created ContinuousPipe

3 years ago, I was starting to push the first commits to a side project aiming at simplifying the deployment of my Docker containers (on a Kubernetes 0.x cluster at the time).

A year and a half later, my team and many others at Inviqa were using this project called ContinuousPipe as the main tool to deploy our “Dockerized” applications to Kubernetes clusters running on AWS and Google Cloud. …

Nowadays, most of the projects (and/or products) are going towards splitting responsibilities in multiple applications. You will have a pure-JavaScript (ish, could be compiled using things like Elm) front-end and a backend API in any programming language.

How can you deploy your front-end and backend applications from a monolith repository to Heroku?

If you use different Git repositories for each of these applications you won’t have any problem. But I have to admit, I’m usually an advocate of monolith repositories. If you want to know why, this article is a good summary.

Image for post
Image for post
Art of monolith repository

Using different Heroku applications

In order to achieve this goal, you could…

In the software engineering industry, we see more and more tools using environment variables as their main configuration mechanism. 12factor, Docker containers, PaaS such as Heroku, … environment variables are everywhere. Recently, Symfony also changed to use environment variables, via a .env file, by default.

These .env files are hard to manage

Unfortunately, managing .env files (or environment variables in general) is not straightforward. Multiple times, I’ve faced these situations:

  • I’m a new user, what should I put in each values? Which variables should I even have?
  • The application changed, which new environment variable do I need to add?
  • A given variable depends on another one. So…

TL;DR: ContinuousPipe’s variables can be promoted to environment variables through the UI or a YAML line.

The most common and recommended way of injecting configuration into a running container is through environment variables. When using ContinuousPipe, you can use variables within the configuration files to reduce duplication, use conditional values, or even use encrypted values.

But there are two aspects to consider here:

  • For newcomers, the difference between these variables and the environment variables is not clear
  • Passing variables to environment variable requires a lot of configuration lines

As a result, we’ve decided to add a new feature to ContinuousPipe…

We’re delighted to officially launch ContinuousPipe — a cloud-based tool using technologies including Docker and Kubernetes to accelerate web and software development workflows and support continuous delivery.

ContinuousPipe significantly cuts lead times and speeds up the development feedback loop by automating the deployment, scaling, and management of web applications.

It enables web developers, IT managers, CTOs, and DevOps managers to collaborate more efficiently with stakeholders while limiting the waste and frustration caused by slow and unreliable developer environments.

ContinuousPipe aims to improve key components of the software development lifecycle including:

  • Feedback and collaboration: By providing an isolated environment for QA…

Samuel ROZE

Software Engineering. Containers. APIs & IPAs.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store