Skip to content

Commit a7d6ed9

Browse files
committed
feat: introduce k8s edit
1 parent 96bc0ff commit a7d6ed9

File tree

2 files changed

+114
-0
lines changed

2 files changed

+114
-0
lines changed

.github/workflows/k8s_edit.yml

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
name: 'K8: Edit'
2+
3+
on:
4+
workflow_call:
5+
6+
# Special permissions required for OIDC authentication
7+
permissions:
8+
id-token: write
9+
contents: read
10+
actions: read
11+
12+
jobs:
13+
k8-edit:
14+
name: 'K8: Edit'
15+
runs-on: ubuntu-latest
16+
environment: ${{ github.ref_name }}
17+
env:
18+
KUBELOGIN_VERSION: "v0.0.25"
19+
KUBERNETES_CLUSTER_REPO_NAME: "${{ vars.KUBERNETES_CLUSTER_REPO_NAME }}"
20+
KUBERNETES_CLUSTER_NAME: "${{ vars.KUBERNETES_CLUSTER_NAME }}"
21+
KUBERNETES_NAMESPACE: "${{ vars.KUBERNETES_NAMESPACE }}"
22+
KUBERNETES_MANIFEST_PATH: "${{ vars.KUBERNETES_MANIFEST_PATH }}"
23+
KUBERNETES_MANIFEST_FILE_PATH: "${{ vars.KUBERNETES_MANIFEST_PATH }}/deployment.yml"
24+
AZURE_RESOURCE_GROUP: "${{ vars.AZURE_RESOURCE_GROUP }}"
25+
AZURE_CONTAINER_REGISTRY: "${{ vars.AZURE_CONTAINER_REGISTRY }}"
26+
IMAGE_TAG: ${{ github.event_name == 'release' && github.event.release.tag_name || github.sha }}
27+
steps:
28+
# Checkout the repository to the GitHub Actions runner
29+
- name: Checkout
30+
uses: actions/checkout@v4
31+
with:
32+
token: ${{ secrets.GH_TOKEN }}
33+
repository: ${{ github.repository_owner }}/${{ env.KUBERNETES_CLUSTER_REPO_NAME }}
34+
ref: refs/heads/dev
35+
36+
- name: GitHub Configuration
37+
run: git config --global url."https://oauth2:${{ secrets.GH_TOKEN }}@github.com".insteadOf https://github.com
38+
39+
- name: Clone cicd-deployment-scripts
40+
run: git clone https://github.com/code-kern-ai/cicd-deployment-scripts.git
41+
42+
# Install the latest version of Kubernetes CLI and configure the Kubernetes CLI configuration file with a Kubernetes Cloud user API token
43+
- name: Azure Cloud Login
44+
uses: azure/login@v2
45+
with:
46+
client-id: ${{ secrets.AZURE_CLIENT_ID }}
47+
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
48+
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
49+
50+
# Use kubelogin to configure your kubeconfig for Azure auth
51+
- name: Set up kubelogin for non-interactive login
52+
uses: azure/use-kubelogin@v1
53+
with:
54+
kubelogin-version: ${{ env.KUBELOGIN_VERSION }}
55+
56+
- uses: azure/aks-set-context@v3
57+
with:
58+
resource-group: ${{ env.AZURE_RESOURCE_GROUP }}
59+
cluster-name: ${{ env.KUBERNETES_CLUSTER_NAME }}
60+
admin: 'false'
61+
use-kubelogin: 'true'
62+
63+
- name: Run Edit
64+
shell: bash
65+
run: |
66+
bash cicd-deployment-scripts/k8s/edit.sh \
67+
-n ${{ env.KUBERNETES_NAMESPACE }} \
68+
-d ${{ github.event.repository.name }} \
69+
-f ${{ env.KUBERNETES_MANIFEST_FILE_PATH }} \
70+
-r ${{ env.AZURE_CONTAINER_REGISTRY }} \
71+
-t ${{ env.IMAGE_TAG }}
72+
73+
- name: Commit changes
74+
shell: bash
75+
run: |
76+
AUTOMATED_RELEASE_BRANCH="automated-release-${{ github.event_name == 'release' && 'prod' || 'dev' }}"
77+
KUBERNETES_POD_NEW_IMAGE="${{ env.AZURE_CONTAINER_REGISTRY }}/${{ github.event.repository.name }}:${{ env.IMAGE_TAG }}"
78+
79+
git fetch origin
80+
git checkout $AUTOMATED_RELEASE_BRANCH || git checkout -b $AUTOMATED_RELEASE_BRANCH
81+
82+
git add ${{ env.KUBERNETES_MANIFEST_FILE_PATH }}
83+
git commit -m "ci(${{ github.event.repository.name }}): $KUBERNETES_POD_NEW_IMAGE"
84+
git push origin $AUTOMATED_RELEASE_BRANCH

k8s/edit.sh

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# !/bin/bash
2+
set -e
3+
4+
KUBERNETES_NAMESPACE=""
5+
KUBERNETES_DEPLOYMENT_NAME=""
6+
KUBERNETES_MANIFEST_FILE_PATH=""
7+
AZURE_CONTAINER_REGISTRY=""
8+
IMAGE_TAG=""
9+
10+
while getopts n:d:r:t:f: flag
11+
do
12+
case "${flag}" in
13+
n) KUBERNETES_NAMESPACE=${OPTARG};;
14+
d) KUBERNETES_DEPLOYMENT_NAME=${OPTARG};;
15+
f) KUBERNETES_MANIFEST_FILE_PATH=${OPTARG};;
16+
r) AZURE_CONTAINER_REGISTRY=${OPTARG};;
17+
t) IMAGE_TAG=${OPTARG};;
18+
esac
19+
done
20+
21+
kubectl config set-context --current --namespace=$KUBERNETES_NAMESPACE
22+
echo "Context set to namespace: \"$KUBERNETES_NAMESPACE\""
23+
24+
KUBERNETES_POD_EXISTING_IMAGE=$(kubectl get pod --output json \
25+
--selector app=${KUBERNETES_DEPLOYMENT_NAME} \
26+
| jq -r '.items[0] | .spec.containers[0].image')
27+
KUBERNETES_POD_NEW_IMAGE="${AZURE_CONTAINER_REGISTRY}/${KUBERNETES_DEPLOYMENT_NAME}:${IMAGE_TAG}"
28+
29+
echo "$(sed "s|${KUBERNETES_POD_EXISTING_IMAGE}|${KUBERNETES_POD_NEW_IMAGE}|g" ${KUBERNETES_MANIFEST_FILE_PATH})" > $KUBERNETES_MANIFEST_FILE_PATH
30+
echo "::notice::Deployment manifest updated with new image: ${KUBERNETES_POD_NEW_IMAGE}"

0 commit comments

Comments
 (0)