Skip to content

Feat: Push the lunettes image to both dockerhub and acr #214

Feat: Push the lunettes image to both dockerhub and acr

Feat: Push the lunettes image to both dockerhub and acr #214

Workflow file for this run

name: End to End Test
on:
push:
pull_request:
env:
REGISTRY: local.io
REGISTRY_NAMESPACE: lunettes
jobs:
create-cluster:
runs-on: ubuntu-latest
steps:
# Free disk space
- name: Free disk space 🧹
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be
with:
android: true
dotnet: true
haskell: true
large-packages: false
docker-images: false
swap-storage: false
# git checkout code
- name: Checkout
uses: actions/checkout@v2
# Use the git command to retrieve the current tag information and store it in the environment variable APP_VERSION.
- name: Generate App Version
run: echo APP_VERSION=`git describe --tags --always` >> $GITHUB_ENV
- name: Build lunettes
id: docker_build_lunettes
uses: docker/build-push-action@v2
with:
push: false
file: build/docker/Dockerfile.lunettes
# docker build arg
build-args: |
GOARCH=$(go env GOARCH)
tags: |
${{ env.REGISTRY }}/${{ env.REGISTRY_NAMESPACE }}/${{ env.REGISTRY_NAMESPACE }}:${{ env.APP_VERSION }}
- name: Build grafana
id: docker_build_grafana
uses: docker/build-push-action@v2
with:
push: false
file: build/docker/Dockerfile.grafana
# docker build arg
build-args: |
GRAFANA_PLUGINS="yesoreyeram-infinity-datasource,marcusolsson-json-datasource,marcusolsson-dynamictext-panel,volkovlabs-form-panel:3.1.0"
tags: |
${{ env.REGISTRY }}/${{ env.REGISTRY_NAMESPACE }}/grafana:${{ env.APP_VERSION }}
- name: Pull dependcy
working-directory: ./hack/images-transfer
run: |
chmod +x images_transfer.sh
./images_transfer.sh ${{ env.REGISTRY }}/${{ env.REGISTRY_NAMESPACE }} local
# 将前面构建的 lunettes 和 grafana 镜像名追加到 /tmp/_out.txt 中,以便于后续统一 load 到 kind 中
echo ${{ env.REGISTRY }}/${{ env.REGISTRY_NAMESPACE }}/${{ env.REGISTRY_NAMESPACE }}:${{ env.APP_VERSION }} >> /tmp/_out.txt
echo ${{ env.REGISTRY }}/${{ env.REGISTRY_NAMESPACE }}/grafana:${{ env.APP_VERSION }} >> /tmp/_out.txt
cat /tmp/_out.txt
- name: Create k8s Kind Cluster
uses: helm/kind-action@v1.5.0
with:
config: hack/kind.yaml
cluster_name: k8s
- name: Test kind
run: |
kubectl get ns
- name: kind load image
run: |
# 从 /tmp/_out.txt 加载依赖镜像
while IFS= read -r image || [[ -n "$image" ]]; do
kind load docker-image --name k8s $image
docker rmi $image
done < "/tmp/_out.txt"
- uses: azure/setup-helm@v3
id: install
- name: Deploy lunettes
run: |
sed -i 's/ tag: version/ tag: ${{ env.APP_VERSION }}/g' deploy/helm/lunettes/values.yaml
helm upgrade --install lunettes deploy/helm/lunettes \
--set global.registry=${{ env.REGISTRY }}
# waiting for lunettes ready
set +e
all_pods=$(kubectl -n lunettes get pods -o jsonpath='{.items[*].metadata.name}')
echo "pods are: ${all_pods}"
for ((i=0; i<120; i++))
do
all_pods_running=true
for pod in ${all_pods}
do
status=$(kubectl -n lunettes get pod ${pod} --output=jsonpath="{.status.phase}" )
if [ "${status}" != "Running" ]
then
all_pods_running=false
break
fi
done
if [ ${all_pods_running} = "true" ]
then
echo "all pods are running"
break
fi
output=$(kubectl -n lunettes get pods -owide)
echo "$output"
lunettes_pod_name=$(kubectl -n lunettes get pods | awk '$1 ~ /^lunettes-/{print $1}')
echo -e "################# log lunettes init ......#################\n"
kubectl -n lunettes logs ${lunettes_pod_name} -c init |head -n 100
grafanadi_pod_name=$(kubectl -n lunettes get pods | awk '$1 ~ /^grafanadi-/{print $1}')
echo -e "################# log grafanadi init ......#################\n"
kubectl -n lunettes logs ${grafanadi_pod_name} -c init |head -n 100
es_pod_name=$(kubectl -n lunettes get pods | awk '$1 ~ /^es-single-/{print $1}')
echo -e "################# log es-single ...... #################\n"
kubectl -n lunettes logs ${es_pod_name} | head -n 100
echo "rechecking the pod status after 30s..."
sleep 30
done
set -e
- name: Create test pod
run: |
kubectl run nginx --image=nginx
sleep 10
kubectl get pods
sleep 1m
echo "waiting for lunettes process audit"
- name: Test podinfo api with curl
run: |
curl -X GET 'http://localhost:9094/_cat/indices?v'
response=$(curl -X GET --connect-timeout 3 --max-time 5 "http://localhost:9099/podinfotable?searchkey=name&searchvalue=nginx")
echo "response is $response"
if echo "$response" | grep -q "nginx"; then
echo "URL test passed"
else
echo "URL test failed"
exit 1
fi