Skip to main content

Deployment

Github Actions​

The Initium CLI is able to create CI/CD pipelines from scratch in order to help automate the build and deployment process, as part of a newly created application source code repo. When using the --github flag, the tool is able to create new pipelines responsible for building & deploying actions either during pull request creation or when a PR is merged to the main branch.

initium init github

The files that will be created:

initium_onbranch.yaml

# This file is generate by https://github.com/nearform/initium-cli
name: Deploy on PR

on:
pull_request:
types: [opened, synchronize, reopened, closed]

jobs:
on_pr:
if: github.event.action != 'closed'
concurrency: ${{ github.head_ref }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
ref: ${{ github.head_ref }}

- name: build and deploy application
uses: docker://ghcr.io/nearform/initium-cli:latest
with:
args: onbranch
env:
INITIUM_REGISTRY_USER: ${{ github.actor }}
INITIUM_REGISTRY_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
INITIUM_CLUSTER_ENDPOINT: ${{ secrets.CLUSTER_ENDPOINT }}
INITIUM_CLUSTER_TOKEN: ${{ secrets.CLUSTER_TOKEN }}
INITIUM_CLUSTER_CA_CERT: ${{ secrets.CLUSTER_CA_CERT }}

closed_pr:
if: github.event.action == 'closed'
concurrency: ${{ github.head_ref }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: delete application
uses: docker://ghcr.io/nearform/initium-cli:latest
with:
args: onbranch --clean --branch-name ${{ github.head_ref }}
env:
INITIUM_REGISTRY_USER: ${{ github.actor }}
INITIUM_REGISTRY_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
INITIUM_CLUSTER_ENDPOINT: ${{ secrets.CLUSTER_ENDPOINT }}
INITIUM_CLUSTER_TOKEN: ${{ secrets.CLUSTER_TOKEN }}
INITIUM_CLUSTER_CA_CERT: ${{ secrets.CLUSTER_CA_CERT }}

initium_onmain.yaml

# This file is generate by https://github.com/nearform/initium-cli
name: Deploy on main

on:
push:
branches:
- main

jobs:
cli:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: build and deploy on main
uses: docker://ghcr.io/nearform/initium-cli:latest
with:
args: onmain
env:
INITIUM_REGISTRY_USER: ${{ github.actor }}
INITIUM_REGISTRY_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
INITIUM_CLUSTER_ENDPOINT: ${{ secrets.CLUSTER_ENDPOINT }}
INITIUM_CLUSTER_TOKEN: ${{ secrets.CLUSTER_TOKEN }}
INITIUM_CLUSTER_CA_CERT: ${{ secrets.CLUSTER_CA_CERT }}

Running locally​

Setup local environment​

These are the environment variables that you have to set in order to use the onmain, onbranch commands from your local environment

export INITIUM_REGISTRY_PASSWORD="<github_pat>"
export INITIUM_REGISTRY_USER="<github_user>"

and

export INITIUM_CLUSTER_ENDPOINT=$(kubectl config view -o jsonpath='{.clusters[?(@.name == "kind-k8s-kurated-addons")].cluster.server}')
export INITIUM_CLUSTER_TOKEN=$(kubectl get secrets initium-cli-token -o jsonpath="{.data.token}" | base64 -d)
export INITIUM_CLUSTER_CA_CERT=$(kubectl get secrets initium-cli-token -o jsonpath="{.data.ca\.crt}" | base64 -d)

Feature branch​

Builds & deploys the code to the Kubernetes cluster using knative, setting the namespace as the branch name.

initium onbranch

Main branch​

Builds & deploys the code to the Kubernetes cluster using knative, setting main as the namespace.

initium onmain

Application Access​

In order for the application to be reachable, you need to follow the steps below.

For exposing the platform load balancer:

export INITIUM_LB_ENDPOINT="$(kubectl get service -n istio-ingress istio-ingressgateway -o go-template='{{(index .status.loadBalancer.ingress 0).ip}}'):80"

Alternative: we noticed that in some setups that the docker network is not reachable. In that scenario you can expose the service with:

kubectl port-forward service/istio-ingressgateway -n istio-ingress 8080:80 &
export INITIUM_LB_ENDPOINT="127.0.0.1:8080"

Github Actions: The application endpoint can be found at the bottom of the pipeline output. The hostname will look like this: initium-nodejs-demo-app.initium-test.example.com In order to access the application, use the following command:

curl -H "Host: <replace_with_hostname>" $INITIUM_LB_ENDPOINT

The same command applies for onbranch & onmain deployments. The part that will be different is the namespace.