chore(autotest): start emqx

This commit is contained in:
mengzhenyu 2022-03-03 14:31:00 +08:00
parent bb9cde0fb2
commit ec37068e62
1 changed files with 433 additions and 433 deletions

View File

@ -152,436 +152,436 @@ 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: # steps:
- name: Configure AWS Credentials # - name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1 # uses: aws-actions/configure-aws-credentials@v1
with: # with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }} # 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-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}
aws-region: ap-southeast-1 # aws-region: ap-southeast-1
- name: Start Xmeter Services # - name: Start Xmeter Services
run: | # run: |
aws ec2 start-instances --instance-ids i-0dd6d99916baaa1a8 # aws ec2 start-instances --instance-ids i-0dd6d99916baaa1a8
aws ec2 start-instances --instance-ids i-05222103df01eb2d7 # aws ec2 start-instances --instance-ids i-05222103df01eb2d7
sleep 40; # sleep 40;
aws ec2 start-instances --instance-ids i-0c5dccd394ed9be18 # aws ec2 start-instances --instance-ids i-0c5dccd394ed9be18
aws ec2 start-instances --instance-ids i-04c1c50b3e4952266 # aws ec2 start-instances --instance-ids i-04c1c50b3e4952266
#
terraform_mysql: # terraform_mysql:
runs-on: ubuntu-latest # runs-on: ubuntu-latest
#
outputs: # outputs:
mysql_ip: ${{ steps.mysql_ip.outputs.mysql_ip }} # mysql_ip: ${{ steps.mysql_ip.outputs.mysql_ip }}
mysql_url: ${{ steps.mysql_url.outputs.mysql_url }} # mysql_url: ${{ steps.mysql_url.outputs.mysql_url }}
steps: # steps:
- name: Checkout tf-test-automation # - name: Checkout tf-test-automation
uses: actions/checkout@v2 # uses: actions/checkout@v2
with: # with:
repository: emqx/tf-test-automation # repository: emqx/tf-test-automation
ref: emqx-broker # ref: emqx-broker
path: tf-test-automation # path: tf-test-automation
- name: Setup Terraform # - name: Setup Terraform
uses: hashicorp/setup-terraform@v1.3.2 # uses: hashicorp/setup-terraform@v1.3.2
with: # with:
terraform_wrapper: false # terraform_wrapper: false
- name: Terraform Init tf-test-automation # - name: Terraform Init tf-test-automation
working-directory: ./tf-test-automation/services/mysql # working-directory: ./tf-test-automation/services/mysql
id: init1 # id: init1
run: | # 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 }}" # 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 # - name: Terraform Validate tf-test-automation
working-directory: ./tf-test-automation/services/mysql # working-directory: ./tf-test-automation/services/mysql
id: validate1 # id: validate1
run: terraform validate -no-color # run: terraform validate -no-color
- name: Terraform Apply tf-test-automation # - name: Terraform Apply tf-test-automation
working-directory: ./tf-test-automation/services/mysql # working-directory: ./tf-test-automation/services/mysql
id: mysql_url # id: mysql_url
run: | # 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 }}" # 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)" # echo "::set-output name=mysql_url::$(terraform output endpoint)"
- name: Rename and upload mysql tfstate # - name: Rename and upload mysql tfstate
working-directory: ./tf-test-automation/services/mysql # working-directory: ./tf-test-automation/services/mysql
run: | # run: |
mv ./terraform.tfstate ./mysql.tfstate # mv ./terraform.tfstate ./mysql.tfstate
- uses: actions/upload-artifact@v2 # - uses: actions/upload-artifact@v2
if: always() # if: always()
with: # with:
name: tfstate # name: tfstate
path: ./tf-test-automation/services/mysql/mysql.tfstate # path: ./tf-test-automation/services/mysql/mysql.tfstate
- name: Show mysql url # - name: Show mysql url
id: mysql_ip # id: mysql_ip
run: | # run: |
ip=`echo "${{ steps.mysql_url.outputs.mysql_url }}"|awk -F ':' '{print $1}'` # ip=`echo "${{ steps.mysql_url.outputs.mysql_url }}"|awk -F ':' '{print $1}'`
echo "::set-output name=mysql_ip::$ip" # echo "::set-output name=mysql_ip::$ip"
- name: Show mysql ip # - name: Show mysql ip
run: | # run: |
echo ${{ steps.mysql_url.outputs.mysql_url }} # echo ${{ steps.mysql_url.outputs.mysql_url }}
echo ${{ steps.mysql_ip.outputs.mysql_ip }} # echo ${{ steps.mysql_ip.outputs.mysql_ip }}
#
terraform_redis: # terraform_redis:
runs-on: ubuntu-latest # runs-on: ubuntu-latest
#
outputs: # outputs:
redis_private_ip: ${{ steps.redis_ip.outputs.redis_private_ips }} # redis_private_ip: ${{ steps.redis_ip.outputs.redis_private_ips }}
redis_public_ip: ${{ steps.redis_ip.outputs.redis_public_ips }} # redis_public_ip: ${{ steps.redis_ip.outputs.redis_public_ips }}
steps: # steps:
- name: Checkout tf-test-automation # - name: Checkout tf-test-automation
uses: actions/checkout@v2 # uses: actions/checkout@v2
with: # with:
repository: emqx/tf-test-automation # repository: emqx/tf-test-automation
ref: emqx-broker # ref: emqx-broker
path: tf-test-automation # path: tf-test-automation
- name: Setup Terraform # - name: Setup Terraform
uses: hashicorp/setup-terraform@v1.3.2 # uses: hashicorp/setup-terraform@v1.3.2
with: # with:
terraform_wrapper: false # terraform_wrapper: false
- name: Terraform Init tf-test-automation # - name: Terraform Init tf-test-automation
working-directory: ./tf-test-automation/services/redis # working-directory: ./tf-test-automation/services/redis
id: init # id: init
run: | # 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 }}" # 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 # - name: Terraform Validate tf-test-automation
working-directory: ./tf-test-automation/services/redis # working-directory: ./tf-test-automation/services/redis
id: validate # id: validate
run: terraform validate -no-color # run: terraform validate -no-color
- name: Terraform Apply tf-test-automation # - name: Terraform Apply tf-test-automation
working-directory: ./tf-test-automation/services/redis # working-directory: ./tf-test-automation/services/redis
id: redis_ip # id: redis_ip
run: | # run: |
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 }}" # 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 }}"
echo "::set-output name=redis_private_ip::$(terraform output redis_private_ips)" # echo "::set-output name=redis_private_ip::$(terraform output redis_private_ips)"
echo "::set-output name=redis_public_ip::$(terraform output redis_public_ips)" # echo "::set-output name=redis_public_ip::$(terraform output redis_public_ips)"
- name: Rename and upload redis server tfstate # - name: Rename and upload redis server tfstate
working-directory: ./tf-test-automation/services/redis # working-directory: ./tf-test-automation/services/redis
run: | # run: |
mv ./terraform.tfstate ./redis.tfstate # mv ./terraform.tfstate ./redis.tfstate
- uses: actions/upload-artifact@v2 # - uses: actions/upload-artifact@v2
if: always() # if: always()
with: # with:
name: tfstate # name: tfstate
path: ./tf-test-automation/services/redis/redis.tfstate # path: ./tf-test-automation/services/redis/redis.tfstate
- name: Show redis ip # - name: Show redis ip
run: | # run: |
echo ${{ steps.redis_ip.outputs.redis_private_ip }} # echo ${{ steps.redis_ip.outputs.redis_private_ip }}
echo ${{ steps.redis_ip.outputs.redis_public_ip }} # echo ${{ steps.redis_ip.outputs.redis_public_ip }}
#
terraform_pgsql: # terraform_pgsql:
runs-on: ubuntu-latest # runs-on: ubuntu-latest
#
outputs: # outputs:
pgsql_url: ${{ steps.pgsql_url.outputs.pgsql_url }} # pgsql_url: ${{ steps.pgsql_url.outputs.pgsql_url }}
pgsql_ip: ${{ steps.pgsql_ip.outputs.pgsql_ip }} # pgsql_ip: ${{ steps.pgsql_ip.outputs.pgsql_ip }}
steps: # steps:
- name: Checkout tf-test-automation # - name: Checkout tf-test-automation
uses: actions/checkout@v2 # uses: actions/checkout@v2
with: # with:
repository: emqx/tf-test-automation # repository: emqx/tf-test-automation
ref: emqx-broker # ref: emqx-broker
path: tf-test-automation # path: tf-test-automation
- name: Setup Terraform # - name: Setup Terraform
uses: hashicorp/setup-terraform@v1.3.2 # uses: hashicorp/setup-terraform@v1.3.2
with: # with:
terraform_wrapper: false # terraform_wrapper: false
- name: Terraform Init tf-test-automation # - name: Terraform Init tf-test-automation
working-directory: ./tf-test-automation/services/pgsql # working-directory: ./tf-test-automation/services/pgsql
id: init # id: init
run: | # 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 }}" # 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 # - name: Terraform Validate tf-test-automation
working-directory: ./tf-test-automation/services/pgsql # working-directory: ./tf-test-automation/services/pgsql
id: validate # id: validate
run: terraform validate -no-color # run: terraform validate -no-color
- name: Terraform Apply tf-test-automation # - name: Terraform Apply tf-test-automation
working-directory: ./tf-test-automation/services/pgsql # working-directory: ./tf-test-automation/services/pgsql
id: pgsql_url # id: pgsql_url
run: | # 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 }}" # 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)" # echo "::set-output name=pgsql_url::$(terraform output endpoint)"
- name: Rename and upload pgsql server tfstate # - name: Rename and upload pgsql server tfstate
working-directory: ./tf-test-automation/services/pgsql # working-directory: ./tf-test-automation/services/pgsql
run: | # run: |
mv ./terraform.tfstate ./pgsql.tfstate # mv ./terraform.tfstate ./pgsql.tfstate
- uses: actions/upload-artifact@v2 # - uses: actions/upload-artifact@v2
if: always() # if: always()
with: # with:
name: tfstate # name: tfstate
path: ./tf-test-automation/services/pgsql/pgsql.tfstate # path: ./tf-test-automation/services/pgsql/pgsql.tfstate
- name: Show pgsql url # - name: Show pgsql url
id: pgsql_ip # id: pgsql_ip
run: | # run: |
ip=`echo "${{ steps.pgsql_url.outputs.pgsql_url }}"|awk -F ':' '{print $1}'` # ip=`echo "${{ steps.pgsql_url.outputs.pgsql_url }}"|awk -F ':' '{print $1}'`
echo "::set-output name=pgsql_ip::$ip" # echo "::set-output name=pgsql_ip::$ip"
- name: Show pgsql ip # - name: Show pgsql ip
run: | # run: |
echo ${{ steps.pgsql_url.outputs.pgsql_url }} # echo ${{ steps.pgsql_url.outputs.pgsql_url }}
echo ${{ steps.pgsql_ip.outputs.pgsql_ip }} # echo ${{ steps.pgsql_ip.outputs.pgsql_ip }}
#
terraform_mongo: # terraform_mongo:
runs-on: ubuntu-latest # runs-on: ubuntu-latest
#
outputs: # outputs:
mongo_private_ip: ${{ steps.mongo_ip.outputs.mongo_private_ip }} # mongo_private_ip: ${{ steps.mongo_ip.outputs.mongo_private_ip }}
mongo_public_ip: ${{ steps.mongo_ip.outputs.mongo_public_ip }} # mongo_public_ip: ${{ steps.mongo_ip.outputs.mongo_public_ip }}
steps: # steps:
- name: Checkout tf-test-automation # - name: Checkout tf-test-automation
uses: actions/checkout@v2 # uses: actions/checkout@v2
with: # with:
repository: emqx/tf-test-automation # repository: emqx/tf-test-automation
ref: emqx-broker # ref: emqx-broker
path: tf-test-automation # path: tf-test-automation
- name: Setup Terraform # - name: Setup Terraform
uses: hashicorp/setup-terraform@v1.3.2 # uses: hashicorp/setup-terraform@v1.3.2
with: # with:
terraform_wrapper: false # terraform_wrapper: false
- name: Terraform Init tf-test-automation # - name: Terraform Init tf-test-automation
working-directory: ./tf-test-automation/services/mongodb # working-directory: ./tf-test-automation/services/mongodb
id: init # id: init
run: | # 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 }}" # 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 # - name: Terraform Validate tf-test-automation
working-directory: ./tf-test-automation/services/mongodb # working-directory: ./tf-test-automation/services/mongodb
id: validate # id: validate
run: terraform validate -no-color # run: terraform validate -no-color
- name: Terraform Apply tf-test-automation # - name: Terraform Apply tf-test-automation
working-directory: ./tf-test-automation/services/mongodb # working-directory: ./tf-test-automation/services/mongodb
id: mongo_ip # id: mongo_ip
run: | # 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 }}" -var="private_key=${{ secrets.CI_SSH_PRIVATE_KEY }}" # 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 }}"
echo "::set-output name=mongo_private_ip::$(terraform output mongo_private_ips)" # echo "::set-output name=mongo_private_ip::$(terraform output mongo_private_ips)"
echo "::set-output name=mongo_public_ip::$(terraform output mongo_public_ips)" # echo "::set-output name=mongo_public_ip::$(terraform output mongo_public_ips)"
- name: Rename and upload mongo server tfstate # - name: Rename and upload mongo server tfstate
working-directory: ./tf-test-automation/services/mongodb # working-directory: ./tf-test-automation/services/mongodb
run: | # run: |
mv ./terraform.tfstate ./mongo.tfstate # mv ./terraform.tfstate ./mongo.tfstate
- uses: actions/upload-artifact@v2 # - uses: actions/upload-artifact@v2
if: always() # if: always()
with: # with:
name: tfstate # name: tfstate
path: ./tf-test-automation/services/mongodb/mongo.tfstate # path: ./tf-test-automation/services/mongodb/mongo.tfstate
- name: Show mongo ip # - name: Show mongo ip
run: | # run: |
echo ${{ steps.mongo_ip.outputs.mongo_private_ip }} # echo ${{ steps.mongo_ip.outputs.mongo_private_ip }}
echo ${{ steps.mongo_ip.outputs.mongo_public_ip }} # echo ${{ steps.mongo_ip.outputs.mongo_public_ip }}
#
terraform_webhook: # terraform_webhook:
runs-on: ubuntu-latest # runs-on: ubuntu-latest
#
outputs: # outputs:
webhook_ip: ${{ steps.webhook_ip.outputs.webhook_ip }} # webhook_ip: ${{ steps.webhook_ip.outputs.webhook_ip }}
steps: # steps:
- name: Checkout tf-test-automation # - name: Checkout tf-test-automation
uses: actions/checkout@v2 # uses: actions/checkout@v2
with: # with:
repository: emqx/tf-test-automation # repository: emqx/tf-test-automation
ref: emqx-broker # ref: emqx-broker
path: tf-test-automation # path: tf-test-automation
- name: Setup Terraform # - name: Setup Terraform
uses: hashicorp/setup-terraform@v1.3.2 # uses: hashicorp/setup-terraform@v1.3.2
with: # with:
terraform_wrapper: false # terraform_wrapper: false
- name: Terraform Init tf-test-automation # - name: Terraform Init tf-test-automation
working-directory: ./tf-test-automation/services/webhook # working-directory: ./tf-test-automation/services/webhook
id: init # id: init
run: | # 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 }}" # 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 # - name: Terraform Validate tf-test-automation
working-directory: ./tf-test-automation/services/webhook # working-directory: ./tf-test-automation/services/webhook
id: validate # id: validate
run: terraform validate -no-color # run: terraform validate -no-color
- name: Terraform Apply tf-test-automation # - name: Terraform Apply tf-test-automation
working-directory: ./tf-test-automation/services/webhook # working-directory: ./tf-test-automation/services/webhook
id: webhook_ip # id: webhook_ip
run: | # run: |
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 }}" # 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 }}"
echo "::set-output name=webhook_ip::$(terraform output webhook_private_ips)" # echo "::set-output name=webhook_ip::$(terraform output webhook_private_ips)"
- name: Rename and upload webhook server tfstate # - name: Rename and upload webhook server tfstate
working-directory: ./tf-test-automation/services/webhook # working-directory: ./tf-test-automation/services/webhook
run: | # run: |
mv ./terraform.tfstate ./webhook.tfstate # mv ./terraform.tfstate ./webhook.tfstate
- uses: actions/upload-artifact@v2 # - uses: actions/upload-artifact@v2
if: always() # if: always()
with: # with:
name: tfstate # name: tfstate
path: ./tf-test-automation/services/webhook/webhook.tfstate # path: ./tf-test-automation/services/webhook/webhook.tfstate
- name: Show webhook ip # - name: Show webhook ip
run: | # run: |
echo ${{ steps.webhook_ip.outputs.webhook_ip }} # echo ${{ steps.webhook_ip.outputs.webhook_ip }}
#
master_control: # master_control:
runs-on: ubuntu-latest # runs-on: ubuntu-latest
#
needs: [xmeter_start, terraform_emqx, terraform_mysql, terraform_redis, terraform_pgsql, terraform_mongo, terraform_webhook] # needs: [xmeter_start, terraform_emqx, terraform_mysql, terraform_redis, terraform_pgsql, terraform_mongo, terraform_webhook]
steps: # steps:
- uses: actions/checkout@v2 # - uses: actions/checkout@v2
- uses: actions/setup-java@v1 # - uses: actions/setup-java@v1
with: # with:
java-version: '8.0.282' # The JDK version to make available on the path. # java-version: '8.0.282' # The JDK version to make available on the path.
java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk # java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
architecture: x64 # (x64 or x86) - defaults to x64 # architecture: x64 # (x64 or x86) - defaults to x64
- name: Checkout emqx-fvt # - name: Checkout emqx-fvt
uses: actions/checkout@v2 # uses: actions/checkout@v2
with: # with:
repository: emqx/emqx-fvt # repository: emqx/emqx-fvt
ref: broker_performance_test # ref: broker_performance_test
path: emqx-fvt # path: emqx-fvt
- name: install jmeter # - name: install jmeter
timeout-minutes: 10 # timeout-minutes: 10
env: # env:
JMETER_VERSION: 5.3 # JMETER_VERSION: 5.3
run: | # run: |
wget --no-verbose --no-check-certificate -O /tmp/apache-jmeter.tgz https://downloads.apache.org/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz # wget --no-verbose --no-check-certificate -O /tmp/apache-jmeter.tgz https://downloads.apache.org/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz
cd /tmp && tar -xvf apache-jmeter.tgz # cd /tmp && tar -xvf apache-jmeter.tgz
echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties # 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 # echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
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 # 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
ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter # ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
- name: install jmeter plugin # - name: install jmeter plugin
run: | # run: |
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 # 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
wget --no-verbose -O "/opt/jmeter/lib/jedis-3.6.0.jar" https://repo1.maven.org/maven2/redis/clients/jedis/3.6.0/jedis-3.6.0.jar # wget --no-verbose -O "/opt/jmeter/lib/jedis-3.6.0.jar" https://repo1.maven.org/maven2/redis/clients/jedis/3.6.0/jedis-3.6.0.jar
wget --no-verbose -O "/opt/jmeter/lib/postgresql-42.2.18.jar" https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.18/postgresql-42.2.18.jar # wget --no-verbose -O "/opt/jmeter/lib/postgresql-42.2.18.jar" https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.18/postgresql-42.2.18.jar
wget --no-verbose -O "/opt/jmeter/lib/java-jwt-3.16.0.jar" https://repo1.maven.org/maven2/com/auth0/java-jwt/3.16.0/java-jwt-3.16.0.jar # wget --no-verbose -O "/opt/jmeter/lib/java-jwt-3.16.0.jar" https://repo1.maven.org/maven2/com/auth0/java-jwt/3.16.0/java-jwt-3.16.0.jar
wget --no-verbose -O "/opt/jmeter/lib/gmongo-1.5.jar" https://repo1.maven.org/maven2/com/gmongo/gmongo/1.5/gmongo-1.5.jar # wget --no-verbose -O "/opt/jmeter/lib/gmongo-1.5.jar" https://repo1.maven.org/maven2/com/gmongo/gmongo/1.5/gmongo-1.5.jar
wget --no-verbose -O "/opt/jmeter/lib/mongo-java-driver-3.12.8.jar" https://repo1.maven.org/maven2/org/mongodb/mongo-java-driver/3.12.8/mongo-java-driver-3.12.8.jar # wget --no-verbose -O "/opt/jmeter/lib/mongo-java-driver-3.12.8.jar" https://repo1.maven.org/maven2/org/mongodb/mongo-java-driver/3.12.8/mongo-java-driver-3.12.8.jar
rm -rf /opt/jmeter/lib/mongo-java-driver-2.11.3.jar # rm -rf /opt/jmeter/lib/mongo-java-driver-2.11.3.jar
- name: run jmeter # - name: run jmeter
run: | # run: |
/opt/jmeter/bin/jmeter.sh \ # /opt/jmeter/bin/jmeter.sh \
-Jjmeter.save.saveservice.output_format=xml -n \ # -Jjmeter.save.saveservice.output_format=xml -n \
-t ./emqx-fvt/broker-performance-test-suite/broker_attestation_test.jmx \ # -t ./emqx-fvt/broker-performance-test-suite/broker_attestation_test.jmx \
-Demqx_ip=${{ needs.terraform_emqx.outputs.emqx_public_ip }} \ # -Demqx_ip=${{ needs.terraform_emqx.outputs.emqx_public_ip }} \
-Demqx_private_ip1=${{ needs.terraform_emqx.outputs.emqx_node_ip1 }} \ # -Demqx_private_ip1=${{ needs.terraform_emqx.outputs.emqx_node_ip1 }} \
-Demqx_private_ip2=${{ needs.terraform_emqx.outputs.emqx_node_ip2 }} \ # -Demqx_private_ip2=${{ needs.terraform_emqx.outputs.emqx_node_ip2 }} \
-Demqx_private_ip3=${{ needs.terraform_emqx.outputs.emqx_node_ip3 }} \ # -Demqx_private_ip3=${{ needs.terraform_emqx.outputs.emqx_node_ip3 }} \
-Dmysql_ip=${{ needs.terraform_mysql.outputs.mysql_ip }} \ # -Dmysql_ip=${{ needs.terraform_mysql.outputs.mysql_ip }} \
-Dpgsql_ip=${{ needs.terraform_pgsql.outputs.pgsql_ip }} \ # -Dpgsql_ip=${{ needs.terraform_pgsql.outputs.pgsql_ip }} \
-Dredis_private_ip=${{ needs.terraform_redis.outputs.redis_private_ip }} \ # -Dredis_private_ip=${{ needs.terraform_redis.outputs.redis_private_ip }} \
-Dredis_public_ip=${{ needs.terraform_redis.outputs.redis_public_ip }} \ # -Dredis_public_ip=${{ needs.terraform_redis.outputs.redis_public_ip }} \
-Dmongo_private_ip=${{ needs.terraform_mongo.outputs.mongo_private_ip }} \ # -Dmongo_private_ip=${{ needs.terraform_mongo.outputs.mongo_private_ip }} \
-Dmongo_public_ip=${{ needs.terraform_mongo.outputs.mongo_public_ip }} \ # -Dmongo_public_ip=${{ needs.terraform_mongo.outputs.mongo_public_ip }} \
-Dhttp_ip=${{ needs.terraform_webhook.outputs.webhook_ip }} \ # -Dhttp_ip=${{ needs.terraform_webhook.outputs.webhook_ip }} \
-Dxmeter_ip=${{ secrets.XMETER_IP }} \ # -Dxmeter_ip=${{ secrets.XMETER_IP }} \
-Dplugins_path="/opt/jmeter/lib/ext" \ # -Dplugins_path="/opt/jmeter/lib/ext" \
-Dxmeter_user=${{ secrets.XMETER_USER }} \ # -Dxmeter_user=${{ secrets.XMETER_USER }} \
-Dxmeter_pwd=${{ secrets.XMETER_PWD }} \ # -Dxmeter_pwd=${{ secrets.XMETER_PWD }} \
-Dscripts_path="./emqx-fvt/broker-performance-test-suite" \ # -Dscripts_path="./emqx-fvt/broker-performance-test-suite" \
-Dreport_file="jmeter_logs/report.txt" \ # -Dreport_file="jmeter_logs/report.txt" \
-l jmeter_logs/xmeter_process.jtl \ # -l jmeter_logs/xmeter_process.jtl \
-j jmeter_logs/xmeter_process.log # -j jmeter_logs/xmeter_process.log
- name: check logs # - name: check logs
run: | # run: |
if cat jmeter_logs/xmeter_process.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then # if cat jmeter_logs/xmeter_process.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
echo "check logs filed" # echo "check logs filed"
fi # fi
- name: check report # - name: check report
run: | # run: |
if cat jmeter_logs/report.txt | grep -e 'err_report_id' > /dev/null 2>&1; then # if cat jmeter_logs/report.txt | grep -e 'err_report_id' > /dev/null 2>&1; then
echo "check report filed" # echo "check report filed"
exit 1 # exit 1
fi # fi
- uses: actions/upload-artifact@v2 # - uses: actions/upload-artifact@v2
if: always() # if: always()
with: # with:
name: jmeter_logs_report # name: jmeter_logs_report
path: ./jmeter_logs # path: ./jmeter_logs
#
terraform_destroy: # terraform_destroy:
runs-on: ubuntu-latest # runs-on: ubuntu-latest
#
needs: [master_control] # needs: [master_control]
steps: # steps:
- name: Checkout tf-test-automation # - name: Checkout tf-test-automation
uses: actions/checkout@v2 # uses: actions/checkout@v2
with: # with:
repository: emqx/tf-test-automation # repository: emqx/tf-test-automation
ref: cluster # ref: cluster
path: tf-test-automation # path: tf-test-automation
- name: Setup Terraform # - name: Setup Terraform
uses: hashicorp/setup-terraform@v1.3.2 # uses: hashicorp/setup-terraform@v1.3.2
with: # with:
terraform_wrapper: false # terraform_wrapper: false
- uses: actions/download-artifact@v2 # - uses: actions/download-artifact@v2
with: # with:
name: tfstate # name: tfstate
path: ./tf-test-automation/services # path: ./tf-test-automation/services
- name: Terraform Init mysql # - name: Terraform Init mysql
working-directory: ./tf-test-automation/services # working-directory: ./tf-test-automation/services
run: | # run: |
cp mysql.tfstate ./mysql/terraform.tfstate # cp mysql.tfstate ./mysql/terraform.tfstate
cd ./mysql # cd ./mysql
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 }}" # 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 mysql # - name: Terraform Destroy mysql
working-directory: ./tf-test-automation/services/mysql # working-directory: ./tf-test-automation/services/mysql
run: | # 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 }}" # 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 emqx # - name: Terraform Init emqx
working-directory: ./tf-test-automation/services # working-directory: ./tf-test-automation/services
run: | # run: |
cp emqx.tfstate ./emqx/terraform.tfstate # cp emqx.tfstate ./emqx/terraform.tfstate
cd ./emqx # 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 }}" # 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 # - name: Terraform Destroy emqx
working-directory: ./tf-test-automation/services/emqx # working-directory: ./tf-test-automation/services/emqx
run: | # 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 }}" # 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 # - name: Terraform Init redis
working-directory: ./tf-test-automation/services # working-directory: ./tf-test-automation/services
run: | # run: |
cp redis.tfstate ./redis/terraform.tfstate # cp redis.tfstate ./redis/terraform.tfstate
cd ./redis # 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 }}" # 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 # - name: Terraform Destroy redis
working-directory: ./tf-test-automation/services/redis # working-directory: ./tf-test-automation/services/redis
run: | # 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 }}" # 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 # - name: Terraform Init pgsql
working-directory: ./tf-test-automation/services # working-directory: ./tf-test-automation/services
run: | # run: |
cp pgsql.tfstate ./pgsql/terraform.tfstate # cp pgsql.tfstate ./pgsql/terraform.tfstate
cd ./pgsql # 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 }}" # 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 # - name: Terraform Destroy pgsql
working-directory: ./tf-test-automation/services/pgsql # working-directory: ./tf-test-automation/services/pgsql
run: | # 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 }}" # 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 # - name: Terraform Init mongo
working-directory: ./tf-test-automation/services # working-directory: ./tf-test-automation/services
run: | # run: |
cp mongo.tfstate ./mongodb/terraform.tfstate # cp mongo.tfstate ./mongodb/terraform.tfstate
cd ./mongodb # 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 }}" # 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 # - name: Terraform Destroy mongo
working-directory: ./tf-test-automation/services/mongodb # working-directory: ./tf-test-automation/services/mongodb
run: | # 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 }}" # 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 # - name: Terraform Init Webhook
working-directory: ./tf-test-automation/services # working-directory: ./tf-test-automation/services
run: | # run: |
cp webhook.tfstate ./webhook/terraform.tfstate # cp webhook.tfstate ./webhook/terraform.tfstate
cd ./webhook # 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 }}" # 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 # - name: Terraform Destroy Webhook
working-directory: ./tf-test-automation/services/webhook # working-directory: ./tf-test-automation/services/webhook
run: | # 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 }}" # 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: # xmeter_stop:
runs-on: ubuntu-latest # runs-on: ubuntu-latest
#
needs: [terraform_destroy] # needs: [terraform_destroy]
steps: # steps:
- name: Configure AWS Credentials # - name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1 # uses: aws-actions/configure-aws-credentials@v1
with: # with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_FOR_PERFORMANCE_TESTING }} # 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-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_FOR_PERFORMANCE_TESTING }}
aws-region: ap-southeast-1 # aws-region: ap-southeast-1
- name: Start Xmeter Services # - name: Start Xmeter Services
run: | # run: |
aws ec2 stop-instances --instance-ids i-0dd6d99916baaa1a8 # aws ec2 stop-instances --instance-ids i-0dd6d99916baaa1a8
aws ec2 stop-instances --instance-ids i-05222103df01eb2d7 # aws ec2 stop-instances --instance-ids i-05222103df01eb2d7
aws ec2 stop-instances --instance-ids i-0c5dccd394ed9be18 # aws ec2 stop-instances --instance-ids i-0c5dccd394ed9be18
aws ec2 stop-instances --instance-ids i-04c1c50b3e4952266 # aws ec2 stop-instances --instance-ids i-04c1c50b3e4952266