This commit is contained in:
Serhiy Mytrovtsiy 2019-09-26 20:32:48 +02:00
parent 67e105d621
commit ac1d12ce3b
4 changed files with 179 additions and 1 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
.idea
.git
.DS_Store

26
Dockerfile Normal file
View File

@ -0,0 +1,26 @@
FROM alpine:3.10.2
MAINTAINER Serhiy Mitrovtsiy <mitrovtsiy@ukr.net>
LABEL name="kubectl"
LABEL version="1.0.0"
LABEL repository="https://github.com/exelban/gcloud"
LABEL homepage="https://github.com/exelban/gcloud"
LABEL maintainer="Serhiy Mytrovtsiy <mitrovtsiy@ukr.net>"
LABEL com.github.actions.name="Kuberentes (k8s) cli - kubectl"
LABEL com.github.actions.description="GitHub Action for working with kubectl (k8s)"
LABEL com.github.actions.icon="terminal"
LABEL com.github.actions.color="blue"
ARG KUBE_VERSION="1.15.4"
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh && \
apk add --no-cache --update openssl curl ca-certificates && \
curl -L https://storage.googleapis.com/kubernetes-release/release/v$KUBE_VERSION/bin/linux/amd64/kubectl -o /usr/local/bin/kubectl && \
chmod +x /usr/local/bin/kubectl && \
rm -rf /var/cache/apk/*
ENTRYPOINT ["/entrypoint.sh"]
CMD ["cluster-info"]

117
README.md
View File

@ -1,2 +1,117 @@
# kubectl # kubectl
GitHub Action for working with kubectl (k8s)
[![Preview](https://serhiy.s3.eu-central-1.amazonaws.com/Github_repo/kubectl/logo.png)](https://cloud.google.com)
GitHub Action for working with kubectl ([k8s](https://kubernetes.io))
## Usage
To use kubectl put this step into your workflow:
### Authorization with config file
```yaml
- uses: exelban/kubectl@master
env:
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
with:
args: get pods
```
### Authorization with credentials
```yaml
- uses: exelban/kubectl@master
env:
KUBE_HOST: ${{ secrets.KUBE_HOST }}
KUBE_USERNAME: ${{ secrets.KUBE_USERNAME }}
KUBE_PASSWORD: ${{ secrets.KUBE_PASSWORD }}
KUBE_CERTIFICATE: ${{ secrets.KUBE_CERTIFICATE }}
with:
args: get pods
```
## 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](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/).
For this method `KUBE_CONFIG` required.
You can find it: `cat $HOME/.kube/config | base64 `.
Optionally you can switch the [context](https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/) (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](https://kubernetes.io/docs/reference/access-authn-authz/authentication/).
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
```yaml
name: Get pods
on: [push]
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: exelban/kubectl@master
env:
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
with:
args: get pods
```
```yaml
name: Get pods
on: [push]
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: exelban/kubectl@master
env:
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
- uses: exelban/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:
```yaml
- uses: exelban/kubectl@1.14.3
env:
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
with:
args: get pods
```
## Licence
[MIT License](https://github.com/exelban/kubectl/blob/master/LICENSE)

34
entrypoint.sh Normal file
View File

@ -0,0 +1,34 @@
#!/bin/sh
set -e
if [ ! -d "$HOME/.kube" ]; then
mkdir -p $HOME/.kube
fi
if [ ! -f "$HOME/.kube/config" ]; then
if [ ! -z "${KUBE_CONFIG}" ]; then
echo "$KUBE_CONFIG" | base64 -d > $HOME/.kube/config
if [ ! -z "${KUBE_CONTEXT}" ]; then
kubectl config use-context $KUBE_CONTEXT
fi
elif [ ! -z "${KUBE_HOST}" ]; then
echo "$KUBE_CERTIFICATE" | base64 -d > $HOME/.kube/certificate
kubectl config set-cluster default --server=https://$KUBE_HOST --certificate-authority=$HOME/.kube/certificate > /dev/null
kubectl config set-credentials cluster-admin --username=$KUBE_USERNAME --password=$KUBE_PASSWORD > /dev/null
kubectl config set-context default --cluster=default --namespace=default --user=cluster-admin > /dev/null
kubectl config use-context default > /dev/null
else
echo "No authorization data found. Please provide CONFIG or HTTPS variables. Exiting...."
exit 1
fi
fi
echo ::add-path::/usr/local/bin/kubectl
kubectl $*