Skip to content

actions-hub/kubectl

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

78 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

kubectl

Preview

GitHub Action for interacting with kubectl (k8s)

Usage

To use kubectl put this step into your workflow:

Authorization with config file

- uses: actions-hub/kubectl@master
  env:
    KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
  with:
    args: get pods

Authorization with credentials

- uses: actions-hub/kubectl@master
  env:
    KUBE_HOST: ${{ secrets.KUBE_HOST }}
    KUBE_CERTIFICATE: ${{ secrets.KUBE_CERTIFICATE }}
    KUBE_USERNAME: ${{ secrets.KUBE_USERNAME }}
    KUBE_PASSWORD: ${{ secrets.KUBE_PASSWORD }}
  with:
    args: get pods

Authorization with a bearer token

- uses: actions-hub/kubectl@master
  env:
    KUBE_HOST: ${{ secrets.KUBE_HOST }}
    KUBE_CERTIFICATE: ${{ secrets.KUBE_CERTIFICATE }}
    KUBE_TOKEN: ${{ secrets.KUBE_TOKEN }}
  with:
    args: get pods

Using kubectl ouput

  - run: echo "EXPECTED_NAMESPACE=namespace/$NAMESPACE" >> $GITHUB_ENV
  - name: 🛂 Check namespace exists
    uses: actions-hub/kubectl@master
    with:
      redirect-to: NAMESPACE_EXIST
      args: get namespace ${{ env.NAMESPACE }} -o name --ignore-not-found

  - name: 🛡️ Preserve secret WEBAPP_TLS
    if: env.NAMESPACE_EXIST == env.EXPECTED_NAMESPACE
    uses: actions-hub/kubectl@master
    with:
      redirect-to: WEBAPP_TLS
      args: get secret webapp-tls -n ${{ env.NAMESPACE }} -o yaml

Environment variables

All these variables need to authorize to kubernetes cluster.
I recommend using secrets for this.

KUBECONFIG file

First options its to use kubeconfig file.

For this method KUBE_CONFIG required.
You can find it: cat $HOME/.kube/config | base64 .

Optionally you can switch the context (the cluster) if you have few in kubeconfig file. Passing specific context to KUBE_CONTEXT. To see the list of available contexts do: kubectl config get-contexts.

Variable Type
KUBE_CONFIG string (base64)
KUBE_CONTEXT string

KUBECONFIG file

Another way to authenticate in the cluster is HTTP basic auth.

For this you need to pass:

  • host (IP only, without protocol)
  • username
  • password
  • cluster CA certificate
Variable Type
KUBE_HOST string
KUBE_USERNAME string
KUBE_PASSWORD string
KUBE_CERTIFICATE string

Example

name: Get pods
on: [push]

jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - uses: actions-hub/kubectl@master
        env:
          KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
        with:
          args: get pods
name: Get pods
on: [push]

jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - uses: actions-hub/kubectl@master
        env:
          KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}

      - uses: actions-hub/kubectl@master
        with:
          args: get pods

Versions

If you need a specific version of kubectl, make a PR with a specific version number. After accepting PR the new release will be created.
To use a specific version of kubectl use:

- uses: actions-hub/kubectl@1.14.3
  env:
    KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
  with:
    args: get pods

Licence

MIT License