Feat: Push the lunettes image to both dockerhub and acr #214
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |