GitHub Action for interacting with kubectl (k8s)
To use kubectl put this step into your workflow:
- uses: actions-hub/kubectl@master env: KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }} with: args: get pods
- 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
- 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
- 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
All these variables need to authorize to kubernetes cluster.
I recommend using secrets for this.
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 |
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 |
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
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