git-to-k8s

0.4.2 • Public • Published

git-to-k8s

NPM Version NPM Downloads Build Status Test Coverage

Small tool to automate the git to url flow on k8s

Installation

npm install -g git-to-k8s

Get Started

Dependencies

  • helm initialized in Kubernetes cluster (Support helm v3 since 0.4.0)
  • docker available and logged in already to registry
  • git available

Steps for a normal project:

  • commit project code to git repo
  • include deployment attributes in package.json and add charts
  • clone the repo to local, build images and push to container registry
  • launch deployment with helm on k8s (helm install or helm upgrade)

Sample package.json:

{
  "deploy": {
    "registry": "(optional, default registry for images)",
    "images": [
      {
        "prepare": "npm build (optional)",
        "dockerfile": "(optional, default: Dockerfile)",
        "name": "app1",
        "tag": "0.1.1",
        "path": "(optional, default: .)",
        "registry": "(optional, registry for images)"
      }
    ],
    "namespace": "(optional, default namespace to use for deployments)",
    "charts": [
      {
        "path": "charts (optional, default: charts)",
        "values": "values.prod.yaml",
        "release": "px.app1",
        "namespace": "(optional, namespace for deployment of this chart)"
      }
    ]
  }
}

Commands

Installation

$ npm i -g git-to-k8s
$ git-to-k8s --help
Usage: git-to-k8s repo_url [--dry] [-b branch] [-n namespace] [--purge] [--debug] [--local] [--image-only] [--chart-only] 
 Options: 
     -b branch: specify the git branch for a remote repository 
     -n namespace: specify the target namespace for deployment(When specified, 
                   it will override the one specified in package.json if there is any) 
     --help: get help info 
     --local: use a local file system copy as source 
     --purge: purge helm release first before deploy each chart 
     --image-only: only update images to registry 
     --chart-only: only deploy charts without touching images 
     --dry: dry run only and shows commands to execute, with images will be built 
     --debug: show debug info from helm

Sample:

# Or git-to-k8s https://github.com/devfans/git-to-k8s 
$ git-to-k8s ../git-to-k8s --local 
 Checking dependencies... 
 Target git remote url: ../git-to-k8s 
 Total 4 steps to run 
 Step: 1 / 4 - Copy repo to local temp work directory 
 - shell: mkdir -p /var/tmp/git-to-k8s  
 - shell: cd /var/tmp/git-to-k8s  
 - shell: rm -rf git-to-k8s  
 - shell: cp -rf /Users/stefan/git/git-to-k8s /var/tmp/git-to-k8s/git-to-k8s  
 - shell: cd git-to-k8s  
 Step: 2 / 4 - Build docker images and push to registry 
 - shell: docker build -t devfans/test:0.0.1 -f sample/Dockerfile sample  
Sending build context to Docker daemon  18.43kB
Step 1/5 : FROM node:alpine
 ---> d97a436daee9
Step 2/5 : COPY package.json package.json
 ---> Using cache
 ---> 10b9ecfdaad0
Step 3/5 : COPY index.js index.js
 ---> Using cache
 ---> 791a2c9ae772
Step 4/5 : RUN npm install --production
 ---> Using cache
 ---> cf5e9c30358c
Step 5/5 : CMD npm start
 ---> Using cache
 ---> f3685f97d68f
Successfully built f3685f97d68f
Successfully tagged devfans/test:0.0.1
 - shell: docker push devfans/test:0.0.1  
The push refers to repository [docker.io/devfans/test]
a42f2337f3ac: Preparing
e69bf457f958: Preparing
050688a0d9a4: Preparing
edbc4261579a: Preparing
899ccf6367e3: Preparing
61ab2b48f3de: Preparing
f1b5933fe4b5: Preparing
f1b5933fe4b5: Waiting
61ab2b48f3de: Waiting
e69bf457f958: Layer already exists
edbc4261579a: Layer already exists
050688a0d9a4: Layer already exists
899ccf6367e3: Layer already exists
a42f2337f3ac: Layer already exists
f1b5933fe4b5: Layer already exists
61ab2b48f3de: Layer already exists
0.0.1: digest: sha256:5606ad82de703b895576b0ab6846b5da9aedaa0c0f2e852fd00fea4a408c8757 size: 1783
REVISION: 1
RELEASED: Mon Aug  5 20:06:42 2019
CHART: test-5.0.3
USER-SUPPLIED VALUES:
fullname: test-git-to-k8s
image:
  pullPolicy: IfNotPresent
  registry: docker.io
  repository: devfans/test
  tag: 0.0.1
ingress:
  annotations: {}
  enabled: false
  hosts:
  - test.local
  path: /
  tls: []
resources:
  requests:
    cpu: 10m
    memory: 10Mi
serviceType: ClusterIP
testPath: /
testPort: 80

COMPUTED VALUES:
fullname: test-git-to-k8s
image:
  pullPolicy: IfNotPresent
  registry: docker.io
  repository: devfans/test
  tag: 0.0.1
ingress:
  annotations: {}
  enabled: false
  hosts:
  - test.local
  path: /
  tls: []
resources:
  requests:
    cpu: 10m
    memory: 10Mi
serviceType: ClusterIP
testPath: /
testPort: 80

HOOKS:
MANIFEST:

---
# Source: test/templates/svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: test-git-to-k8s
  labels:
    app: test-git-to-k8s
    chart: "test-5.0.3"
    release: "test-git-to-k8s"
    heritage: "Tiller"
spec:
  type: ClusterIP
  ports:
  - name: http
    port: 80
    targetPort: http
  selector:
    app: test-git-to-k8s
---
# Source: test/templates/deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: test-git-to-k8s
  labels:
    app: test-git-to-k8s
    chart: "test-5.0.3"
    release: "test-git-to-k8s"
    heritage: "Tiller"
spec:
  selector:
    matchLabels:
      app: test-git-to-k8s
      release: "test-git-to-k8s"
  replicas: 1
  template:
    metadata:
      labels:
        app: test-git-to-k8s
        chart: "test-5.0.3"
        release: "test-git-to-k8s"
    spec:
      containers:
      - name: test-git-to-k8s
        image: "docker.io/devfans/test:0.0.1"
        imagePullPolicy: "IfNotPresent"
        ports:
        - name: http
          containerPort: 3000
        livenessProbe:
          httpGet:
            path: /
            port: http
            httpHeaders:
            - name: Host
              value: "127.0.0.1"
          initialDelaySeconds: 120
          timeoutSeconds: 5
          failureThreshold: 6
        readinessProbe:
          httpGet:
            path: /
            port: http
            httpHeaders:
            - name: Host
              value: "127.0.0.1"
          initialDelaySeconds: 30
          timeoutSeconds: 3
          periodSeconds: 5
        resources:
          requests:
            cpu: 10m
            memory: 10Mi
 Step: 3 / 4 - Deploy charts 
 - shell: helm upgrade -f sample/charts/test/values.yaml test-git-to-k8s sample/charts/test  
Release "test-git-to-k8s" has been upgraded.
LAST DEPLOYED: Mon Aug  5 20:08:26 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/Pod(related)
NAME                              READY  STATUS   RESTARTS  AGE
test-git-to-k8s-5bb8d969bc-j6p5t  1/1    Running  0         105s

==> v1/Service
NAME             TYPE       CLUSTER-IP    EXTERNAL-IP  PORT(S)  AGE
test-git-to-k8s  ClusterIP  172.20.36.14  <none>       80/TCP   105s

==> v1beta1/Deployment
NAME             READY  UP-TO-DATE  AVAILABLE  AGE
test-git-to-k8s  1/1    1           1          105s


 Step: 4 / 4 - Clean up 
 - shell: rm -rf /var/tmp/git-to-k8s/git-to-k8s  

Package Sidebar

Install

npm i git-to-k8s

Weekly Downloads

3

Version

0.4.2

License

ISC

Unpacked Size

128 kB

Total Files

21

Last publish

Collaborators

  • devfans