chore(autotest): debug broker performance test suite

This commit is contained in:
mengzhenyu 2022-01-14 18:01:48 +08:00
parent 2f4cfaced4
commit 5c13af131b
1 changed files with 464 additions and 426 deletions

View File

@ -24,18 +24,56 @@ jobs:
container: "ghcr.io/emqx/emqx-builder/5.0-3:${{ matrix.otp }}-${{ matrix.os }}" container: "ghcr.io/emqx/emqx-builder/5.0-3:${{ matrix.otp }}-${{ matrix.os }}"
# steps:
# - uses: actions/checkout@v1
# - name: build zip packages
# run: make ${{ matrix.profile }}-zip
# - name: packages test
# run: |
# export CODE_PATH=$GITHUB_WORKSPACE
# EMQX_NAME=${{ matrix.profile }} .ci/build_packages/tests.sh
# - uses: actions/upload-artifact@v2
# with:
# name: ${{ matrix.os}}
# path: _packages/**/*.zip
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
- name: build zip packages - name: prepare
run: make ${{ matrix.profile }}-zip
- name: packages test
run: | run: |
export CODE_PATH=$GITHUB_WORKSPACE echo "EMQX_NAME=${{ matrix.profile }}" >> $GITHUB_ENV
EMQX_NAME=${{ matrix.profile }} .ci/build_packages/tests.sh echo "CODE_PATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV
echo "EMQX_PKG_NAME=${{ matrix.profile }}-$(./pkg-vsn.sh)-otp${{ matrix.otp }}-${{ matrix.os }}-amd64" >> $GITHUB_ENV
- name: Get deps git refs for cache
id: deps-refs
run: |
scripts/get-dep-refs.sh
make clean-all
- name: load rocksdb cache
uses: actions/cache@v2
with:
path: _build/default/lib/rocksdb/
key: ${{ matrix.os }}-${{ matrix.otp }}-amd64-${{ steps.deps-refs.outputs.DEP_ROCKSDB_REF }}
- name: load quicer cache
uses: actions/cache@v2
with:
path: _build/default/lib/quicer/
key: ${{ matrix.os }}-${{ matrix.otp }}-amd64-${{ steps.deps-refs.outputs.DEP_QUICER_REF }}
- name: build and test tgz package
run: |
make ${EMQX_NAME}-tgz
.ci/build_packages/tests.sh "$EMQX_PKG_NAME" tgz
- name: run static checks
if: contains(matrix.os, 'ubuntu')
run: |
make static_checks
- name: build and test deb/rpm packages
run: |
make ${EMQX_NAME}-pkg
.ci/build_packages/tests.sh "$EMQX_PKG_NAME" pkg
- uses: actions/upload-artifact@v2 - uses: actions/upload-artifact@v2
with: with:
name: ${{ matrix.os}} name: ${{ matrix.profile}}-${{ matrix.otp }}-${{ matrix.os }}
path: _packages/**/*.zip path: _packages/${{ matrix.profile}}/*.zip
terraform_emqx: terraform_emqx:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -108,423 +146,423 @@ jobs:
echo ${{ steps.emqx_private_ip.outputs.emqx_node_ip3 }} echo ${{ steps.emqx_private_ip.outputs.emqx_node_ip3 }}
echo ${{ steps.emqx_private_ip.outputs.emqx_public_ip }} echo ${{ steps.emqx_private_ip.outputs.emqx_public_ip }}
xmeter_start: # xmeter_start:
runs-on: ubuntu-latest # runs-on: ubuntu-latest
steps:
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}
aws-region: ap-southeast-1
- name: Start Xmeter Services
run: |
aws ec2 start-instances --instance-ids i-0dd6d99916baaa1a8
aws ec2 start-instances --instance-ids i-05222103df01eb2d7
sleep 40;
aws ec2 start-instances --instance-ids i-0c5dccd394ed9be18
aws ec2 start-instances --instance-ids i-04c1c50b3e4952266
terraform_mysql:
runs-on: ubuntu-latest
outputs:
mysql_ip: ${{ steps.mysql_ip.outputs.mysql_ip }}
mysql_url: ${{ steps.mysql_url.outputs.mysql_url }}
steps:
- name: Checkout tf-test-automation
uses: actions/checkout@v2
with:
repository: emqx/tf-test-automation
ref: emqx-broker
path: tf-test-automation
- name: Setup Terraform
uses: hashicorp/setup-terraform@v1.3.2
with:
terraform_wrapper: false
- name: Terraform Init tf-test-automation
working-directory: ./tf-test-automation/services/mysql
id: init1
run: |
terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
- name: Terraform Validate tf-test-automation
working-directory: ./tf-test-automation/services/mysql
id: validate1
run: terraform validate -no-color
- name: Terraform Apply tf-test-automation
working-directory: ./tf-test-automation/services/mysql
id: mysql_url
run: |
terraform apply -auto-approve -var="db_password=public123" -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
echo "::set-output name=mysql_url::$(terraform output endpoint)"
- name: Rename and upload mysql tfstate
working-directory: ./tf-test-automation/services/mysql
run: |
mv ./terraform.tfstate ./mysql.tfstate
- uses: actions/upload-artifact@v2
if: always()
with:
name: tfstate
path: ./tf-test-automation/services/mysql/mysql.tfstate
- name: Show mysql url
id: mysql_ip
run: |
ip=`echo "${{ steps.mysql_url.outputs.mysql_url }}"|awk -F ':' '{print $1}'`
echo "::set-output name=mysql_ip::$ip"
- name: Show mysql ip
run: |
echo ${{ steps.mysql_url.outputs.mysql_url }}
echo ${{ steps.mysql_ip.outputs.mysql_ip }}
# #
terraform_redis: # steps:
runs-on: ubuntu-latest # - name: Configure AWS Credentials
# uses: aws-actions/configure-aws-credentials@v1
outputs: # with:
redis_ip: ${{ steps.redis_ip.outputs.redis_ip }} # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}
steps: # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}
- name: Checkout tf-test-automation # aws-region: ap-southeast-1
uses: actions/checkout@v2 # - name: Start Xmeter Services
with: # run: |
repository: emqx/tf-test-automation # aws ec2 start-instances --instance-ids i-0dd6d99916baaa1a8
ref: emqx-broker # aws ec2 start-instances --instance-ids i-05222103df01eb2d7
path: tf-test-automation # sleep 40;
- name: Setup Terraform # aws ec2 start-instances --instance-ids i-0c5dccd394ed9be18
uses: hashicorp/setup-terraform@v1.3.2 # aws ec2 start-instances --instance-ids i-04c1c50b3e4952266
with: #
terraform_wrapper: false # terraform_mysql:
- name: Terraform Init tf-test-automation # runs-on: ubuntu-latest
working-directory: ./tf-test-automation/services/redis #
id: init # outputs:
run: | # mysql_ip: ${{ steps.mysql_ip.outputs.mysql_ip }}
terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" # mysql_url: ${{ steps.mysql_url.outputs.mysql_url }}
- name: Terraform Validate tf-test-automation # steps:
working-directory: ./tf-test-automation/services/redis # - name: Checkout tf-test-automation
id: validate # uses: actions/checkout@v2
run: terraform validate -no-color # with:
- name: Terraform Apply tf-test-automation # repository: emqx/tf-test-automation
working-directory: ./tf-test-automation/services/redis # ref: emqx-broker
id: redis_ip # path: tf-test-automation
run: | # - name: Setup Terraform
terraform apply -auto-approve -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" -var="private_key=${{ secrets.CI_SSH_PRIVATE_KEY }}" # uses: hashicorp/setup-terraform@v1.3.2
echo "::set-output name=redis_ip::$(terraform output redis_private_ips)" # with:
- name: Rename and upload redis server tfstate # terraform_wrapper: false
working-directory: ./tf-test-automation/services/redis # - name: Terraform Init tf-test-automation
run: | # working-directory: ./tf-test-automation/services/mysql
mv ./terraform.tfstate ./redis.tfstate # id: init1
- uses: actions/upload-artifact@v2 # run: |
if: always() # terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
with: # - name: Terraform Validate tf-test-automation
name: tfstate # working-directory: ./tf-test-automation/services/mysql
path: ./tf-test-automation/services/redis/redis.tfstate # id: validate1
- name: Show redis ip # run: terraform validate -no-color
run: | # - name: Terraform Apply tf-test-automation
echo ${{ steps.redis_ip.outputs.redis_ip }} # working-directory: ./tf-test-automation/services/mysql
# id: mysql_url
terraform_pgsql: # run: |
runs-on: ubuntu-latest # terraform apply -auto-approve -var="db_password=public123" -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
# echo "::set-output name=mysql_url::$(terraform output endpoint)"
outputs: # - name: Rename and upload mysql tfstate
pgsql_url: ${{ steps.pgsql_url.outputs.pgsql_url }} # working-directory: ./tf-test-automation/services/mysql
pgsql_ip: ${{ steps.pgsql_ip.outputs.pgsql_ip }} # run: |
steps: # mv ./terraform.tfstate ./mysql.tfstate
- name: Checkout tf-test-automation # - uses: actions/upload-artifact@v2
uses: actions/checkout@v2 # if: always()
with: # with:
repository: emqx/tf-test-automation # name: tfstate
ref: emqx-broker # path: ./tf-test-automation/services/mysql/mysql.tfstate
path: tf-test-automation # - name: Show mysql url
- name: Setup Terraform # id: mysql_ip
uses: hashicorp/setup-terraform@v1.3.2 # run: |
with: # ip=`echo "${{ steps.mysql_url.outputs.mysql_url }}"|awk -F ':' '{print $1}'`
terraform_wrapper: false # echo "::set-output name=mysql_ip::$ip"
- name: Terraform Init tf-test-automation # - name: Show mysql ip
working-directory: ./tf-test-automation/services/pgsql # run: |
id: init # echo ${{ steps.mysql_url.outputs.mysql_url }}
run: | # echo ${{ steps.mysql_ip.outputs.mysql_ip }}
terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" ##
- name: Terraform Validate tf-test-automation # terraform_redis:
working-directory: ./tf-test-automation/services/pgsql # runs-on: ubuntu-latest
id: validate #
run: terraform validate -no-color # outputs:
- name: Terraform Apply tf-test-automation # redis_ip: ${{ steps.redis_ip.outputs.redis_ip }}
working-directory: ./tf-test-automation/services/pgsql # steps:
id: pgsql_url # - name: Checkout tf-test-automation
run: | # uses: actions/checkout@v2
terraform apply -auto-approve -var="db_password=public123" -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" # with:
echo "::set-output name=pgsql_url::$(terraform output endpoint)" # repository: emqx/tf-test-automation
- name: Rename and upload pgsql server tfstate # ref: emqx-broker
working-directory: ./tf-test-automation/services/pgsql # path: tf-test-automation
run: | # - name: Setup Terraform
mv ./terraform.tfstate ./pgsql.tfstate # uses: hashicorp/setup-terraform@v1.3.2
- uses: actions/upload-artifact@v2 # with:
if: always() # terraform_wrapper: false
with: # - name: Terraform Init tf-test-automation
name: tfstate # working-directory: ./tf-test-automation/services/redis
path: ./tf-test-automation/services/pgsql/pgsql.tfstate # id: init
- name: Show pgsql url # run: |
id: pgsql_ip # terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
run: | # - name: Terraform Validate tf-test-automation
ip=`echo "${{ steps.pgsql_url.outputs.pgsql_url }}"|awk -F ':' '{print $1}'` # working-directory: ./tf-test-automation/services/redis
echo "::set-output name=pgsql_ip::$ip" # id: validate
- name: Show pgsql ip # run: terraform validate -no-color
run: | # - name: Terraform Apply tf-test-automation
echo ${{ steps.pgsql_url.outputs.pgsql_url }} # working-directory: ./tf-test-automation/services/redis
echo ${{ steps.pgsql_ip.outputs.pgsql_ip }} # id: redis_ip
# run: |
terraform_mongo: # terraform apply -auto-approve -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" -var="private_key=${{ secrets.CI_SSH_PRIVATE_KEY }}"
runs-on: ubuntu-latest # echo "::set-output name=redis_ip::$(terraform output redis_private_ips)"
# - name: Rename and upload redis server tfstate
outputs: # working-directory: ./tf-test-automation/services/redis
mongo_ip: ${{ steps.mongo_ip.outputs.mongo_ip }} # run: |
steps: # mv ./terraform.tfstate ./redis.tfstate
- name: Checkout tf-test-automation # - uses: actions/upload-artifact@v2
uses: actions/checkout@v2 # if: always()
with: # with:
repository: emqx/tf-test-automation # name: tfstate
ref: emqx-broker # path: ./tf-test-automation/services/redis/redis.tfstate
path: tf-test-automation # - name: Show redis ip
- name: Setup Terraform # run: |
uses: hashicorp/setup-terraform@v1.3.2 # echo ${{ steps.redis_ip.outputs.redis_ip }}
with: #
terraform_wrapper: false # terraform_pgsql:
- name: Terraform Init tf-test-automation # runs-on: ubuntu-latest
working-directory: ./tf-test-automation/services/mongodb #
id: init # outputs:
run: | # pgsql_url: ${{ steps.pgsql_url.outputs.pgsql_url }}
terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" # pgsql_ip: ${{ steps.pgsql_ip.outputs.pgsql_ip }}
- name: Terraform Validate tf-test-automation # steps:
working-directory: ./tf-test-automation/services/mongodb # - name: Checkout tf-test-automation
id: validate # uses: actions/checkout@v2
run: terraform validate -no-color # with:
- name: Terraform Apply tf-test-automation # repository: emqx/tf-test-automation
working-directory: ./tf-test-automation/services/mongodb # ref: emqx-broker
id: mongo_ip # path: tf-test-automation
run: | # - name: Setup Terraform
terraform apply -auto-approve -var="db_password=public123" -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" -var="private_key=${{ secrets.CI_SSH_PRIVATE_KEY }}" # uses: hashicorp/setup-terraform@v1.3.2
echo "::set-output name=mongo_ip::$(terraform output mongo_private_ips)" # with:
- name: Rename and upload mongo server tfstate # terraform_wrapper: false
working-directory: ./tf-test-automation/services/mongodb # - name: Terraform Init tf-test-automation
run: | # working-directory: ./tf-test-automation/services/pgsql
mv ./terraform.tfstate ./mongo.tfstate # id: init
- uses: actions/upload-artifact@v2 # run: |
if: always() # terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
with: # - name: Terraform Validate tf-test-automation
name: tfstate # working-directory: ./tf-test-automation/services/pgsql
path: ./tf-test-automation/services/mongodb/mongo.tfstate # id: validate
- name: Show mongo ip # run: terraform validate -no-color
run: | # - name: Terraform Apply tf-test-automation
echo ${{ steps.mongo_ip.outputs.mongo_ip }} # working-directory: ./tf-test-automation/services/pgsql
# id: pgsql_url
terraform_webhook: # run: |
runs-on: ubuntu-latest # terraform apply -auto-approve -var="db_password=public123" -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
# echo "::set-output name=pgsql_url::$(terraform output endpoint)"
outputs: # - name: Rename and upload pgsql server tfstate
webhook_ip: ${{ steps.webhook_ip.outputs.webhook_ip }} # working-directory: ./tf-test-automation/services/pgsql
steps: # run: |
- name: Checkout tf-test-automation # mv ./terraform.tfstate ./pgsql.tfstate
uses: actions/checkout@v2 # - uses: actions/upload-artifact@v2
with: # if: always()
repository: emqx/tf-test-automation # with:
ref: emqx-broker # name: tfstate
path: tf-test-automation # path: ./tf-test-automation/services/pgsql/pgsql.tfstate
- name: Setup Terraform # - name: Show pgsql url
uses: hashicorp/setup-terraform@v1.3.2 # id: pgsql_ip
with: # run: |
terraform_wrapper: false # ip=`echo "${{ steps.pgsql_url.outputs.pgsql_url }}"|awk -F ':' '{print $1}'`
- name: Terraform Init tf-test-automation # echo "::set-output name=pgsql_ip::$ip"
working-directory: ./tf-test-automation/services/webhook # - name: Show pgsql ip
id: init # run: |
run: | # echo ${{ steps.pgsql_url.outputs.pgsql_url }}
terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" # echo ${{ steps.pgsql_ip.outputs.pgsql_ip }}
- name: Terraform Validate tf-test-automation #
working-directory: ./tf-test-automation/services/webhook # terraform_mongo:
id: validate # runs-on: ubuntu-latest
run: terraform validate -no-color #
- name: Terraform Apply tf-test-automation # outputs:
working-directory: ./tf-test-automation/services/webhook # mongo_ip: ${{ steps.mongo_ip.outputs.mongo_ip }}
id: webhook_ip # steps:
run: | # - name: Checkout tf-test-automation
terraform apply -auto-approve -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" -var="private_key=${{ secrets.CI_SSH_PRIVATE_KEY }}" # uses: actions/checkout@v2
echo "::set-output name=webhook_ip::$(terraform output webhook_private_ips)" # with:
- name: Rename and upload webhook server tfstate # repository: emqx/tf-test-automation
working-directory: ./tf-test-automation/services/webhook # ref: emqx-broker
run: | # path: tf-test-automation
mv ./terraform.tfstate ./webhook.tfstate # - name: Setup Terraform
- uses: actions/upload-artifact@v2 # uses: hashicorp/setup-terraform@v1.3.2
if: always() # with:
with: # terraform_wrapper: false
name: tfstate # - name: Terraform Init tf-test-automation
path: ./tf-test-automation/services/webhook/webhook.tfstate # working-directory: ./tf-test-automation/services/mongodb
- name: Show webhook ip # id: init
run: | # run: |
echo ${{ steps.webhook_ip.outputs.webhook_ip }} # terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
# - name: Terraform Validate tf-test-automation
master_control: # working-directory: ./tf-test-automation/services/mongodb
runs-on: ubuntu-latest # id: validate
# run: terraform validate -no-color
needs: [xmeter_start, terraform_emqx, terraform_mysql, terraform_redis, terraform_pgsql, terraform_mongo, terraform_webhook] # - name: Terraform Apply tf-test-automation
steps: # working-directory: ./tf-test-automation/services/mongodb
- uses: actions/checkout@v2 # id: mongo_ip
- uses: actions/setup-java@v1 # run: |
with: # terraform apply -auto-approve -var="db_password=public123" -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" -var="private_key=${{ secrets.CI_SSH_PRIVATE_KEY }}"
java-version: '8.0.282' # The JDK version to make available on the path. # echo "::set-output name=mongo_ip::$(terraform output mongo_private_ips)"
java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk # - name: Rename and upload mongo server tfstate
architecture: x64 # (x64 or x86) - defaults to x64 # working-directory: ./tf-test-automation/services/mongodb
- name: Checkout emqx-fvt # run: |
uses: actions/checkout@v2 # mv ./terraform.tfstate ./mongo.tfstate
with: # - uses: actions/upload-artifact@v2
repository: emqx/emqx-fvt # if: always()
ref: broker_performance_test # with:
path: emqx-fvt # name: tfstate
- name: install jmeter # path: ./tf-test-automation/services/mongodb/mongo.tfstate
timeout-minutes: 10 # - name: Show mongo ip
env: # run: |
JMETER_VERSION: 5.3 # echo ${{ steps.mongo_ip.outputs.mongo_ip }}
run: | #
wget --no-verbose --no-check-certificate -O /tmp/apache-jmeter.tgz https://downloads.apache.org/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz # terraform_webhook:
cd /tmp && tar -xvf apache-jmeter.tgz # runs-on: ubuntu-latest
echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties #
echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties # outputs:
wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-fuse-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-fuse-2.0.2-jar-with-dependencies.jar # webhook_ip: ${{ steps.webhook_ip.outputs.webhook_ip }}
ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter # steps:
- name: install jmeter plugin # - name: Checkout tf-test-automation
run: | # uses: actions/checkout@v2
wget --no-verbose -O "/opt/jmeter/lib/mysql-connector-java-8.0.16.jar" https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.16/mysql-connector-java-8.0.16.jar # with:
- name: run jmeter # repository: emqx/tf-test-automation
working-directory: ./emqx-fvt/broker-performance-test-suite # ref: emqx-broker
run: | # path: tf-test-automation
/opt/jmeter/bin/jmeter.sh \ # - name: Setup Terraform
-Jjmeter.save.saveservice.output_format=xml -n \ # uses: hashicorp/setup-terraform@v1.3.2
-t broker_attestation_test.jmx \ # with:
-Demqx_ip=${{ needs.terraform_emqx.outputs.emqx_public_ip }} \ # terraform_wrapper: false
-Demqx_private_ip1=${{ needs.terraform_emqx.outputs.emqx_node_ip1 }} \ # - name: Terraform Init tf-test-automation
-Demqx_private_ip2=${{ needs.terraform_emqx.outputs.emqx_node_ip2 }} \ # working-directory: ./tf-test-automation/services/webhook
-Demqx_private_ip3=${{ needs.terraform_emqx.outputs.emqx_node_ip3 }} \ # id: init
-Dmysql_ip=${{ needs.terraform_mysql.outputs.mysql_ip }} \ # run: |
-Dpgsql_ip=${{ needs.terraform_pgsql.outputs.pgsql_ip }} \ # terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
-Dredis_ip=${{ needs.terraform_redis.outputs.redis_ip }} \ # - name: Terraform Validate tf-test-automation
-Dmongo_ip=${{ needs.terraform_mongo.outputs.mongo_ip }} \ # working-directory: ./tf-test-automation/services/webhook
-Dhttp_ip=${{ needs.terraform_webhook.outputs.webhook_ip }} \ # id: validate
-Dxmeter_ip=${{ secrets.XMETER_IP }} \ # run: terraform validate -no-color
-Dplugins_path="/opt/jmeter/lib/ext" \ # - name: Terraform Apply tf-test-automation
-Dxmeter_user=${{ secrets.XMETER_USER }} \ # working-directory: ./tf-test-automation/services/webhook
-Dxmeter_pwd=${{ secrets.XMETER_PWD }} \ # id: webhook_ip
-Dscripts_path=".ci/performance-test-suite" \ # run: |
-Dreport_file="jmeter_logs/report.txt" \ # terraform apply -auto-approve -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" -var="private_key=${{ secrets.CI_SSH_PRIVATE_KEY }}"
-l jmeter_logs/xmeter_process.jtl \ # echo "::set-output name=webhook_ip::$(terraform output webhook_private_ips)"
-j jmeter_logs/xmeter_process.log # - name: Rename and upload webhook server tfstate
- name: check logs # working-directory: ./tf-test-automation/services/webhook
run: | # run: |
if cat jmeter_logs/xmeter_process.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then # mv ./terraform.tfstate ./webhook.tfstate
echo "check logs filed" # - uses: actions/upload-artifact@v2
fi # if: always()
- name: check report # with:
run: | # name: tfstate
if cat jmeter_logs/report.txt | grep -e 'err_report_id' > /dev/null 2>&1; then # path: ./tf-test-automation/services/webhook/webhook.tfstate
echo "check report filed" # - name: Show webhook ip
exit 1 # run: |
fi # echo ${{ steps.webhook_ip.outputs.webhook_ip }}
- uses: actions/upload-artifact@v2 #
if: always() # master_control:
with: # runs-on: ubuntu-latest
name: jmeter_logs_report #
path: ./jmeter_logs # needs: [xmeter_start, terraform_emqx, terraform_mysql, terraform_redis, terraform_pgsql, terraform_mongo, terraform_webhook]
# steps:
terraform_destroy: # - uses: actions/checkout@v2
runs-on: ubuntu-latest # - uses: actions/setup-java@v1
# with:
needs: [master_control] # java-version: '8.0.282' # The JDK version to make available on the path.
steps: # java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
- name: Checkout tf-test-automation # architecture: x64 # (x64 or x86) - defaults to x64
uses: actions/checkout@v2 # - name: Checkout emqx-fvt
with: # uses: actions/checkout@v2
repository: emqx/tf-test-automation # with:
ref: cluster # repository: emqx/emqx-fvt
path: tf-test-automation # ref: broker_performance_test
- name: Setup Terraform # path: emqx-fvt
uses: hashicorp/setup-terraform@v1.3.2 # - name: install jmeter
with: # timeout-minutes: 10
terraform_wrapper: false # env:
- uses: actions/download-artifact@v2 # JMETER_VERSION: 5.3
with: # run: |
name: tfstate # wget --no-verbose --no-check-certificate -O /tmp/apache-jmeter.tgz https://downloads.apache.org/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz
path: ./tf-test-automation/services # cd /tmp && tar -xvf apache-jmeter.tgz
- name: Terraform Init mysql # echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
working-directory: ./tf-test-automation/services # echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
run: | # wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-fuse-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-fuse-2.0.2-jar-with-dependencies.jar
cp mysql.tfstate ./mysql/terraform.tfstate # ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
cd ./mysql # - name: install jmeter plugin
terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" # run: |
- name: Terraform Destroy mysql # wget --no-verbose -O "/opt/jmeter/lib/mysql-connector-java-8.0.16.jar" https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.16/mysql-connector-java-8.0.16.jar
working-directory: ./tf-test-automation/services/mysql # - name: run jmeter
run: | # working-directory: ./emqx-fvt/broker-performance-test-suite
terraform destroy -auto-approve -var="db_password=public123" -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" # run: |
- name: Terraform Init emqx # /opt/jmeter/bin/jmeter.sh \
working-directory: ./tf-test-automation/services # -Jjmeter.save.saveservice.output_format=xml -n \
run: | # -t broker_attestation_test.jmx \
cp emqx.tfstate ./emqx/terraform.tfstate # -Demqx_ip=${{ needs.terraform_emqx.outputs.emqx_public_ip }} \
cd ./emqx # -Demqx_private_ip1=${{ needs.terraform_emqx.outputs.emqx_node_ip1 }} \
terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" # -Demqx_private_ip2=${{ needs.terraform_emqx.outputs.emqx_node_ip2 }} \
- name: Terraform Destroy emqx # -Demqx_private_ip3=${{ needs.terraform_emqx.outputs.emqx_node_ip3 }} \
working-directory: ./tf-test-automation/services/emqx # -Dmysql_ip=${{ needs.terraform_mysql.outputs.mysql_ip }} \
run: | # -Dpgsql_ip=${{ needs.terraform_pgsql.outputs.pgsql_ip }} \
terraform destroy -auto-approve -var="region=ap-southeast-1" -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" # -Dredis_ip=${{ needs.terraform_redis.outputs.redis_ip }} \
- name: Terraform Init redis # -Dmongo_ip=${{ needs.terraform_mongo.outputs.mongo_ip }} \
working-directory: ./tf-test-automation/services # -Dhttp_ip=${{ needs.terraform_webhook.outputs.webhook_ip }} \
run: | # -Dxmeter_ip=${{ secrets.XMETER_IP }} \
cp redis.tfstate ./redis/terraform.tfstate # -Dplugins_path="/opt/jmeter/lib/ext" \
cd ./redis # -Dxmeter_user=${{ secrets.XMETER_USER }} \
terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" # -Dxmeter_pwd=${{ secrets.XMETER_PWD }} \
- name: Terraform Destroy redis # -Dscripts_path=".ci/performance-test-suite" \
working-directory: ./tf-test-automation/services/redis # -Dreport_file="jmeter_logs/report.txt" \
run: | # -l jmeter_logs/xmeter_process.jtl \
terraform destroy -auto-approve -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" -var="private_key=${{ secrets.CI_SSH_PRIVATE_KEY }}" # -j jmeter_logs/xmeter_process.log
- name: Terraform Init pgsql # - name: check logs
working-directory: ./tf-test-automation/services # run: |
run: | # if cat jmeter_logs/xmeter_process.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
cp pgsql.tfstate ./pgsql/terraform.tfstate # echo "check logs filed"
cd ./pgsql # fi
terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" # - name: check report
- name: Terraform Destroy pgsql # run: |
working-directory: ./tf-test-automation/services/pgsql # if cat jmeter_logs/report.txt | grep -e 'err_report_id' > /dev/null 2>&1; then
run: | # echo "check report filed"
terraform destroy -auto-approve -var="db_password=public123" -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" # exit 1
- name: Terraform Init mongo # fi
working-directory: ./tf-test-automation/services # - uses: actions/upload-artifact@v2
run: | # if: always()
cp mongo.tfstate ./mongodb/terraform.tfstate # with:
cd ./mongodb # name: jmeter_logs_report
terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" # path: ./jmeter_logs
- name: Terraform Destroy mongo #
working-directory: ./tf-test-automation/services/mongodb # terraform_destroy:
run: | # runs-on: ubuntu-latest
terraform destroy -auto-approve -var="db_password=public123" -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" #
- name: Terraform Init Webhook # needs: [master_control]
working-directory: ./tf-test-automation/services # steps:
run: | # - name: Checkout tf-test-automation
cp webhook.tfstate ./webhook/terraform.tfstate # uses: actions/checkout@v2
cd ./webhook # with:
terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" # repository: emqx/tf-test-automation
- name: Terraform Destroy Webhook # ref: cluster
working-directory: ./tf-test-automation/services/webhook # path: tf-test-automation
run: | # - name: Setup Terraform
terraform destroy -auto-approve -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" # uses: hashicorp/setup-terraform@v1.3.2
# with:
xmeter_stop: # terraform_wrapper: false
runs-on: ubuntu-latest # - uses: actions/download-artifact@v2
# with:
needs: [terraform_destroy] # name: tfstate
steps: # path: ./tf-test-automation/services
- name: Configure AWS Credentials # - name: Terraform Init mysql
uses: aws-actions/configure-aws-credentials@v1 # working-directory: ./tf-test-automation/services
with: # run: |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }} # cp mysql.tfstate ./mysql/terraform.tfstate
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }} # cd ./mysql
aws-region: ap-southeast-1 # terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
- name: Start Xmeter Services # - name: Terraform Destroy mysql
run: | # working-directory: ./tf-test-automation/services/mysql
aws ec2 stop-instances --instance-ids i-0dd6d99916baaa1a8 # run: |
aws ec2 stop-instances --instance-ids i-05222103df01eb2d7 # terraform destroy -auto-approve -var="db_password=public123" -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
aws ec2 stop-instances --instance-ids i-0c5dccd394ed9be18 # - name: Terraform Init emqx
aws ec2 stop-instances --instance-ids i-04c1c50b3e4952266 # working-directory: ./tf-test-automation/services
# run: |
# cp emqx.tfstate ./emqx/terraform.tfstate
# cd ./emqx
# terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
# - name: Terraform Destroy emqx
# working-directory: ./tf-test-automation/services/emqx
# run: |
# terraform destroy -auto-approve -var="region=ap-southeast-1" -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
# - name: Terraform Init redis
# working-directory: ./tf-test-automation/services
# run: |
# cp redis.tfstate ./redis/terraform.tfstate
# cd ./redis
# terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
# - name: Terraform Destroy redis
# working-directory: ./tf-test-automation/services/redis
# run: |
# terraform destroy -auto-approve -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}" -var="private_key=${{ secrets.CI_SSH_PRIVATE_KEY }}"
# - name: Terraform Init pgsql
# working-directory: ./tf-test-automation/services
# run: |
# cp pgsql.tfstate ./pgsql/terraform.tfstate
# cd ./pgsql
# terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
# - name: Terraform Destroy pgsql
# working-directory: ./tf-test-automation/services/pgsql
# run: |
# terraform destroy -auto-approve -var="db_password=public123" -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
# - name: Terraform Init mongo
# working-directory: ./tf-test-automation/services
# run: |
# cp mongo.tfstate ./mongodb/terraform.tfstate
# cd ./mongodb
# terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
# - name: Terraform Destroy mongo
# working-directory: ./tf-test-automation/services/mongodb
# run: |
# terraform destroy -auto-approve -var="db_password=public123" -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
# - name: Terraform Init Webhook
# working-directory: ./tf-test-automation/services
# run: |
# cp webhook.tfstate ./webhook/terraform.tfstate
# cd ./webhook
# terraform init --backend-config="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" --backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
# - name: Terraform Destroy Webhook
# working-directory: ./tf-test-automation/services/webhook
# run: |
# terraform destroy -auto-approve -var="access_key=${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}" -var="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}"
#
# xmeter_stop:
# runs-on: ubuntu-latest
#
# needs: [terraform_destroy]
# steps:
# - name: Configure AWS Credentials
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}
# aws-region: ap-southeast-1
# - name: Start Xmeter Services
# run: |
# aws ec2 stop-instances --instance-ids i-0dd6d99916baaa1a8
# aws ec2 stop-instances --instance-ids i-05222103df01eb2d7
# aws ec2 stop-instances --instance-ids i-0c5dccd394ed9be18
# aws ec2 stop-instances --instance-ids i-04c1c50b3e4952266