Hexa.run
(author)
xLayers.dev
(author)
Compodoc.app
(co-author)
ngx.tools
(author)
The on-demand availability of computer system resources, without direct active management by the user.
Network
Storage
Servers
Virtualization
OS
Middleware
Runtime
Database
Application
Network
Storage
Servers
Virtualization
OS
Middleware
Runtime
Database
Application
Network
Storage
Servers
Virtualization
OS
Middleware
Runtime
Database
Application
Network
Storage
Servers
Virtualization
OS
Middleware
Runtime
Database
Application
On Premise
IAAS
PAAS
SAAS
Network
Storage
Servers
Virtualization
OS
Middleware
Runtime
Database
Application
FAAS
Managed by you
Managed by the Cloud Provider
Functions
Functions
Functions
Functions
Capture your process into a script or a tool. IaC minimizes risk and increases speed.
Commit/Push
Build
Unit Tests
Code Quality
Publish
Deploy
Regression Tests
variables:
npm_config_cache: $(Pipeline.Workspace)/.npm
trigger:
- master
pool:
vmImage: 'ubuntu-16.04'
strategy:
matrix:
node_10_x:
node_version: 10.x
node_11_x:
node_version: 11.x
node_12_x:
node_version: 12.x
node_13_x:
node_version: 13.x
maxParallel: 4
steps:
- task: CacheBeta@1
inputs:
key: npm | $(Agent.OS) | package-lock.json
path: $(npm_config_cache)
displayName: Cache npm
- task: NodeTool@0
inputs:
versionSpec: $(node_version)
displayName: 'Install Node.js'
- script: npm ci
displayName: 'npm install'
- script: npm run build.library.all
displayName: 'ci/build-all-libraries'
env:
BUILD_ID: $(Build.SourceVersion)
- script: npm run app.build.prod
displayName: 'ci/build-app'
env:
BUILD_ID: $(Build.SourceVersion)
- script: |
npm i -D jest-junit
npm run test.ci -- --reporters=default --reporters=jest-junit --maxWorkers=2
displayName: 'ci/test'
- script: |
npm i -D jest-junit
npm run e2e
displayName: 'ci/e2e'
- script: npm run lint || (echo "Lint errors detected. Please run ''npm lint --fix''" ; exit 1)
displayName: 'ci/lint'
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testRunner: JUnit
testResultsFiles: './junit.xml'
Any tools or technologies that don’t support your efforts in doing this shouldn’t be on your roadmap.
Pick technologies and platforms that let you use RBAC:
Role-Based Access Control.
You want metrics that allow you to see how your systems are running.
You want to be able to do is absorb the need to scale from where you are to where you might be in a few months.
Migrate first. Innovate next.
They are built from the ground up—optimized for cloud scale and performance. They’re based on microservices architectures, use managed services, and take advantage of continuous delivery to achieve reliability and faster time to market.
Think about how to decouple the parts of your application - even in a monolith.
One of the best indicators of how resilient and scalable a system will be, in a multi-process system.
Fully managed and highly scalable services are core tenants of any Serverless system.
Serverless is the high level abstraction for Cloud infrastructure.
Event-based architecture model.
The execution can be triggered by any of the managed services (http, timer, queue, etc.)
Type | Trigger | Input | Output |
---|---|---|---|
Blob Storage | ✔ | ✔ | ✔ |
Cosmos DB | ✔ | ✔ | ✔ |
Event Grid | ✔ | ||
Event Hubs | ✔ | ✔ | |
HTTP & Webhooks | ✔ | ✔ | |
Microsoft Graph Excel tables | ✔ | ✔ | |
Microsoft Graph OneDrive files | ✔ | ✔ | |
Microsoft Graph Outlook email | ✔ | ||
Microsoft Graph Events | ✔ | ✔ | ✔ |
Microsoft Graph Auth tokens | ✔ | ||
Mobile Apps | ✔ | ✔ | |
Notification Hubs | ✔ | ||
Queue storage | ✔ | ✔ | |
SendGrid | ✔ | ||
Service Bus | ✔ | ✔ | |
SignalR | ✔ | ✔ | |
Table storage | ✔ | ✔ | |
Timer | ✔ | ||
Twilio | ✔ |
generally available
experimental
** More Runtimes will be supported
1. Capture image (Angular)
2. Upload the image (Storage)
3. Extract text (Vision API)
4. Translate it (Translate API)
5. Store result (Table)
6. Read the result (Queue)
7. Send SMS (TWILIO)
A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another.
Infrastructure
Infrastructure
Host Operating System
Host Operating System
Hypervisor
Container Engine (Docker)
Guest OS
Guest OS
bins/libs
bins/libs
App 1
App 2
bins/libs
bins/libs
App 1
App 2
Virtual Machines
Containers
Docker uses Dockerfiles to specify a series of commands that are run consecutively to create a container.
# /path/to/Dockerfile
FROM nginx:latest
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY dist/html /usr/share/nginx/html
FROM circleci/node:10.9.0-browsers
USER root
###
# Bazel install
# See https://bazel.build/versions/master/docs/install-ubuntu.html#using-bazel-custom-apt-repository-recommended
# Note, only the latest release is available, see https://github.com/bazelbuild/bazel/issues/4947
RUN BAZEL_VERSION="0.18.0" \
&& wget -q -O - https://bazel.build/bazel-release.pub.gpg | apt-key add - \
&& echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" > /etc/apt/sources.list.d/bazel.list \
&& apt-get update \
&& apt-get install -y bazel=$BAZEL_VERSION \
&& rm -rf /var/lib/apt/lists/*
###
# Brotli compression
# Not available on backports so we have to pull from Debian 9
# See https://packages.debian.org/search?keywords=brotli
RUN echo "deb http://deb.debian.org/debian stretch main contrib" > /etc/apt/sources.list.d/stretch.list \
&& apt-get update \
&& apt-get install -y --no-install-recommends brotli/stretch
###
# Buildifier
# TODO(alexeagle): remove this when all users use their locally built buildifier
# BUILD file formatter
# 'bazel clean --expunge' conserves size of the image
RUN git clone https://github.com/bazelbuild/buildtools.git \
&& (cd buildtools \
&& bazel build //buildifier \
&& cp bazel-bin/buildifier/linux_amd64_stripped/buildifier /usr/local/bin/ \
&& bazel clean --expunge \
) && rm -rf buildtools
###
# Skylint
# TODO(alexeagle): remove this when all users use their locally built skylint
# .bzl file linter
# Follows readme at https://github.com/bazelbuild/bazel/blob/master/site/docs/skylark/skylint.md#building-the-linter
# 'bazel clean --expunge' conserves size of the image
RUN git clone https://github.com/bazelbuild/bazel.git \
&& (cd bazel \
&& bazel build //src/tools/skylark/java/com/google/devtools/skylark/skylint:Skylint_deploy.jar \
&& cp bazel-bin/src/tools/skylark/java/com/google/devtools/skylark/skylint/Skylint_deploy.jar /usr/local/bin \
&& bazel clean --expunge \
) && rm -rf bazel
USER circleci
###
# Fix up npm global installation
# See https://docs.npmjs.com/getting-started/fixing-npm-permissions
RUN mkdir ~/.npm-global \
&& npm config set prefix '~/.npm-global' \
&& echo "export PATH=~/.npm-global/bin:$PATH" >> ~/.profile
###
# This version of ChromeDriver works with the Chrome version included
# in the circleci/*-browsers base image above.
# This variable is intended to be used by passing it as an argument to
# "postinstall": "webdriver-manager update ..."
ENV CHROMEDRIVER_VERSION_ARG "--versions.chrome 2.41"
$ docker build -t container-name/image-name:latest .
Build
Run
You should reuse the same image for multiple environments for consistency.
Externalise any environment-specific configuration in environment variables or external services.
Use Docker’s public registry, or Azure Container Registry (ACR) to publish your containers.
Azure Container Instances (ACI) allow you to run a single container on-demand in seconds. Billing is PER SECOND!
Simple. Repeatable. Isolated. Automatable.
Run your large-scale parallel workflows with ease. Not just ETL!
Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.
https://medium.com/google-cloud/modern-frontend-ci-cd-architecture-the-missing-guide-part-1-8444001fadc
Decentralized, globally distributed, multi-model database service.
You want to spend most of your time solving your specific business problem. Your idea.