123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- #
- # Licensed to the Apache Software Foundation (ASF) under one or more
- # contributor license agreements. See the NOTICE file distributed with
- # this work for additional information regarding copyright ownership.
- # The ASF licenses this file to You under the Apache License, Version 2.0
- # (the "License"); you may not use this file except in compliance with
- # the License. You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- #
- on:
- pull_request:
- push:
- branches:
- - dev
- name: E2E-K8S
- concurrency:
- group: E2E-K8S-${{ github.event.pull_request.number || github.ref }}
- cancel-in-progress: true
- jobs:
- paths-filter:
- name: E2E-K8S-Path-Filter
- runs-on: ubuntu-latest
- outputs:
- not-ignore: ${{ steps.filter.outputs.not-ignore }}
- steps:
- - uses: actions/checkout@v2
- - uses: dorny/paths-filter@b2feaf19c27470162a626bd6fa8438ae5b263721
- id: filter
- with:
- filters: |
- not-ignore:
- - '!(docs/**)'
- e2e-k8s:
- name: E2E-K8S-Execute
- needs: paths-filter
- if: ${{ (needs.paths-filter.outputs.not-ignore == 'true') || (github.event_name == 'push') }}
- runs-on: ubuntu-latest
- timeout-minutes: 20
- steps:
- - uses: actions/checkout@v2
- with:
- submodules: true
- - name: Build Image
- run: |
- ./mvnw -B clean package \
- -Dmaven.test.skip \
- -Dmaven.javadoc.skip \
- -Dspotless.skip=true \
- -Dmaven.checkstyle.skip \
- -Dmaven.deploy.skip \
- -Ddocker.push.skip=true \
- -Pdocker,release -Ddocker.tag=ci \
- -pl org.apache.dolphinscheduler:dolphinscheduler-alert-server \
- -pl dolphinscheduler-tools \
- -pl dolphinscheduler-api \
- -pl dolphinscheduler-master \
- -pl dolphinscheduler-worker -am
- - name: Create k8s Kind Cluster
- run: |
- # install kubectl
- curl -LO "https://dl.k8s.io/release/v1.28.3/bin/linux/amd64/kubectl"
- sudo chmod +x kubectl
- sudo mv kubectl /usr/local/bin/kubectl
- # install kind
- curl -LO https://github.com/kubernetes-sigs/kind/releases/download/v0.20.0/kind-linux-amd64
- sudo chmod +x kind-linux-amd64
- sudo mv kind-linux-amd64 /usr/local/bin/kind
- kind version
- # create kind cluster
- kind_node_image="kindest/node:v1.23.17"
- echo "Kubernetes version: ${kind_node_image}"
- kind create cluster --name dolphinscheduler --image ${kind_node_image}
- kubectl version
- kubectl get all --all-namespaces
- - name: Load images
- run: |
- components=("master" "worker" "api" "tools" "alert-server")
- for component in "${components[@]}"; do
- kind load docker-image apache/dolphinscheduler-${component}:ci --name dolphinscheduler
- done
- - name: Helm install dolphinscheduler
- working-directory: ${{ github.workspace }}/deploy/kubernetes/dolphinscheduler
- run: |
- # install helm
- curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
- # install ds chart via helm
- helm repo add bitnami https://charts.bitnami.com/bitnami
- helm dependency update .
- helm upgrade --install --create-namespace -n dolphinscheduler dolphinscheduler . -f - <<EOF
- image:
- registry: apache
- tag: ci
- master:
- replicas: 1
- livenessProbe:
- initialDelaySeconds: 120
- readinessProbe:
- initialDelaySeconds: 120
- worker:
- replicas: 1
- livenessProbe:
- initialDelaySeconds: 120
- readinessProbe:
- initialDelaySeconds: 120
- alert:
- livenessProbe:
- initialDelaySeconds: 120
- readinessProbe:
- initialDelaySeconds: 120
- api:
- livenessProbe:
- initialDelaySeconds: 120
- readinessProbe:
- initialDelaySeconds: 120
- EOF
- - name: Wait for pods
- run: |
- JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}';
- components=("master" "worker" "api" "alert")
- for component in "${components[@]}"; do
- until kubectl -n dolphinscheduler get pods -l app.kubernetes.io/component=${component} -o jsonpath="$JSONPATH" 2>&1 | grep -q "Ready=True"; do
- echo "waiting for dolphinscheduler ${component} to be available"
- sleep 10
- kubectl get pods --all-namespaces
- kubectl get events --all-namespaces
- for pod in $(kubectl get pods -n dolphinscheduler -o jsonpath='{.items[*].metadata.name}'); do
- echo "logs for pod $pod:"
- kubectl logs --tail=1000 -n dolphinscheduler $pod
- done
- done
- done
|