release
This commit is contained in:
parent
67e105d621
commit
ac1d12ce3b
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
.idea
|
||||
.git
|
||||
.DS_Store
|
||||
26
Dockerfile
Normal file
26
Dockerfile
Normal 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
117
README.md
@ -1,2 +1,117 @@
|
||||
# kubectl
|
||||
GitHub Action for working with kubectl (k8s)
|
||||
|
||||
[](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
34
entrypoint.sh
Normal 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 $*
|
||||
Loading…
Reference in New Issue
Block a user