run_automate_tests.yaml 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461
  1. name: Integration Test Suites
  2. on:
  3. push:
  4. tags:
  5. - "v4.*"
  6. pull_request:
  7. branches:
  8. - "main-v4.*"
  9. jobs:
  10. build:
  11. runs-on: ubuntu-latest
  12. outputs:
  13. imgname: ${{ steps.build_docker.outputs.imgname}}
  14. version: ${{ steps.build_docker.outputs.version}}
  15. steps:
  16. - name: download jmeter
  17. id: dload_jmeter
  18. timeout-minutes: 1
  19. env:
  20. JMETER_VERSION: 5.3
  21. run: |
  22. wget --no-verbose --no-check-certificate -O /tmp/apache-jmeter.tgz https://downloads.apache.org/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz
  23. - uses: actions/upload-artifact@v2
  24. with:
  25. name: apache-jmeter.tgz
  26. path: /tmp/apache-jmeter.tgz
  27. - uses: actions/checkout@v2
  28. - name: build docker
  29. id: build_docker
  30. run: |
  31. if [ -f EMQX_ENTERPRISE ]; then
  32. echo "https://ci%40emqx.io:${{ secrets.CI_GIT_TOKEN }}@github.com" > $HOME/.git-credentials
  33. git config --global credential.helper store
  34. echo "${{ secrets.CI_GIT_TOKEN }}" >> scripts/git-token
  35. make deps-emqx-ee
  36. make clean
  37. fi
  38. make docker
  39. echo "::set-output name=version::$(./pkg-vsn.sh)"
  40. if [ -f EMQX_ENTERPRISE ]; then
  41. echo "::set-output name=imgname::emqx-ee"
  42. else
  43. echo "::set-output name=imgname::emqx"
  44. fi
  45. - uses: actions/upload-artifact@v2
  46. with:
  47. name: emqx-docker-image-zip
  48. path: _packages/${{ steps.build_docker.outputs.imgname }}/${{ steps.build_docker.outputs.imgname }}-docker-${{ steps.build_docker.outputs.version }}.zip
  49. webhook:
  50. runs-on: ubuntu-latest
  51. strategy:
  52. fail-fast: false
  53. matrix:
  54. webhook_type:
  55. - webhook_data_bridge
  56. needs: build
  57. steps:
  58. - uses: actions/checkout@v2
  59. - uses: actions/download-artifact@v2
  60. with:
  61. name: emqx-docker-image-zip
  62. path: /tmp
  63. - name: load docker image
  64. env:
  65. imgname: ${{ needs.build.outputs.imgname}}
  66. version: ${{ needs.build.outputs.version }}
  67. run: |
  68. unzip -q /tmp/${imgname}-docker-${version}.zip -d /tmp
  69. docker load < /tmp/${imgname}-docker-${version}
  70. - name: docker compose up
  71. timeout-minutes: 5
  72. env:
  73. TARGET: emqx/${{ needs.build.outputs.imgname }}
  74. EMQX_TAG: ${{ needs.build.outputs.version }}
  75. run: |
  76. docker-compose \
  77. -f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
  78. up -d --build
  79. - uses: actions/checkout@v2
  80. with:
  81. repository: emqx/emqx-svt-web-server
  82. ref: web-server-1.0
  83. path: emqx-svt-web-server
  84. - uses: actions/download-artifact@v2
  85. - name: run webserver in docker
  86. run: |
  87. cd ./emqx-svt-web-server/svtserver
  88. mvn clean package
  89. cd target
  90. docker run --name webserver --network emqx_bridge -d -v $(pwd)/svtserver-0.0.1.jar:/webserver/svtserver-0.0.1.jar --workdir /webserver openjdk:8-jdk bash \
  91. -c "java -jar svtserver-0.0.1.jar"
  92. - name: wait docker compose up
  93. timeout-minutes: 5
  94. run: |
  95. while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
  96. echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
  97. sleep 5;
  98. done
  99. docker ps -a
  100. echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
  101. echo WEB_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' webserver) >> $GITHUB_ENV
  102. - uses: actions/checkout@v2
  103. with:
  104. repository: emqx/emqx-fvt
  105. ref: v1.6.0
  106. path: scripts
  107. - uses: actions/setup-java@v1
  108. with:
  109. java-version: '8.0.282' # The JDK version to make available on the path.
  110. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  111. architecture: x64 # (x64 or x86) - defaults to x64
  112. - uses: actions/download-artifact@v2
  113. with:
  114. name: apache-jmeter.tgz
  115. path: /tmp
  116. - name: install jmeter
  117. timeout-minutes: 10
  118. env:
  119. JMETER_VERSION: 5.3
  120. run: |
  121. cd /tmp && tar -xvf apache-jmeter.tgz
  122. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  123. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  124. wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-2.0.2-jar-with-dependencies.jar
  125. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  126. - name: run jmeter
  127. run: |
  128. /opt/jmeter/bin/jmeter.sh \
  129. -Jjmeter.save.saveservice.output_format=xml -n \
  130. -t scripts/automate-test-suite/${{ matrix.webhook_type }}.jmx \
  131. -Demqx_ip=$HAPROXY_IP \
  132. -Dweb_ip=$WEB_IP \
  133. -l jmeter_logs/webhook_${{ matrix.webhook_type }}.jtl \
  134. -j jmeter_logs/logs/webhook_${{ matrix.webhook_type }}.log
  135. - name: check logs
  136. run: |
  137. if cat jmeter_logs/webhook_${{ matrix.webhook_type }}.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
  138. echo "check logs filed"
  139. exit 1
  140. fi
  141. - uses: actions/upload-artifact@v1
  142. if: always()
  143. with:
  144. name: jmeter_logs
  145. path: ./jmeter_logs
  146. mysql:
  147. runs-on: ubuntu-latest
  148. strategy:
  149. fail-fast: false
  150. matrix:
  151. mysql_tag:
  152. - 5.7
  153. - 8
  154. mysql_type:
  155. - mysql_auth_acl
  156. needs: build
  157. steps:
  158. - uses: actions/checkout@v2
  159. - uses: actions/download-artifact@v2
  160. with:
  161. name: emqx-docker-image-zip
  162. path: /tmp
  163. - name: load docker image
  164. env:
  165. imgname: ${{ needs.build.outputs.imgname }}
  166. version: ${{ needs.build.outputs.version }}
  167. run: |
  168. unzip -q /tmp/${imgname}-docker-${version}.zip -d /tmp
  169. docker load < /tmp/${imgname}-docker-${version}
  170. - name: docker compose up
  171. timeout-minutes: 5
  172. env:
  173. TARGET: emqx/${{ needs.build.outputs.imgname }}
  174. EMQX_TAG: ${{ needs.build.outputs.version }}
  175. MYSQL_TAG: ${{ matrix.mysql_tag }}
  176. run: |
  177. docker-compose \
  178. -f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
  179. -f .ci/docker-compose-file/docker-compose-mysql-tls.yaml \
  180. up -d --build
  181. - name: wait docker compose up
  182. timeout-minutes: 5
  183. run: |
  184. while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
  185. echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
  186. sleep 5;
  187. done
  188. while [ $(docker ps -a --filter name=client --filter exited=0 | wc -l) \
  189. != $(docker ps -a --filter name=client | wc -l) ]; do
  190. sleep 1
  191. done
  192. docker ps -a
  193. echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
  194. echo MYSQL_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql) >> $GITHUB_ENV
  195. - uses: actions/checkout@v2
  196. with:
  197. repository: emqx/emqx-fvt
  198. ref: v1.6.0
  199. path: scripts
  200. - uses: actions/setup-java@v1
  201. with:
  202. java-version: '8.0.282' # The JDK version to make available on the path.
  203. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  204. architecture: x64 # (x64 or x86) - defaults to x64
  205. - uses: actions/download-artifact@v2
  206. with:
  207. name: apache-jmeter.tgz
  208. path: /tmp
  209. - name: install jmeter
  210. timeout-minutes: 10
  211. env:
  212. JMETER_VERSION: 5.3
  213. run: |
  214. cd /tmp && tar -xvf apache-jmeter.tgz
  215. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  216. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  217. wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-2.0.2-jar-with-dependencies.jar
  218. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  219. - name: install jmeter plugin
  220. run: |
  221. 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
  222. - name: run jmeter
  223. run: |
  224. /opt/jmeter/bin/jmeter.sh \
  225. -Jjmeter.save.saveservice.output_format=xml -n \
  226. -t scripts/automate-test-suite/${{ matrix.mysql_type }}.jmx \
  227. -Droute="apps/emqx_auth_mysql/test/emqx_auth_mysql_SUITE_data" \
  228. -Dmysql_ip=$MYSQL_IP \
  229. -Demqx_ip=$HAPROXY_IP \
  230. -Ddbname="mqtt" \
  231. -Dmysql_user="ssluser" \
  232. -Ddb_user="root" \
  233. -Dmysql_pwd="public" \
  234. -Dconfig_path="/tmp/etc" \
  235. -Ddocker_path=".ci/docker-compose-file" \
  236. -l jmeter_logs/${{ matrix.mysql_type }}_${{ matrix.mysql_tag }}.jtl \
  237. -j jmeter_logs/logs/${{ matrix.mysql_type }}_${{ matrix.mysql_tag }}.log
  238. - name: check logs
  239. run: |
  240. if cat jmeter_logs/${{ matrix.mysql_type }}_${{ matrix.mysql_tag }}.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
  241. echo "check logs filed"
  242. exit 1
  243. fi
  244. - uses: actions/upload-artifact@v1
  245. if: always()
  246. with:
  247. name: jmeter_logs
  248. path: ./jmeter_logs
  249. postgresql:
  250. runs-on: ubuntu-latest
  251. strategy:
  252. fail-fast: false
  253. matrix:
  254. pgsql_type:
  255. - pgsql_auth_acl
  256. pgsql_tag:
  257. - 9
  258. - 10
  259. - 11
  260. - 12
  261. - 13
  262. needs: build
  263. steps:
  264. - uses: actions/checkout@v2
  265. - uses: actions/download-artifact@v2
  266. with:
  267. name: emqx-docker-image-zip
  268. path: /tmp
  269. - name: load docker image
  270. env:
  271. imgname: ${{ needs.build.outputs.imgname }}
  272. version: ${{ needs.build.outputs.version }}
  273. run: |
  274. unzip -q /tmp/${imgname}-docker-${version}.zip -d /tmp
  275. docker load < /tmp/${imgname}-docker-${version}
  276. - name: docker compose up
  277. timeout-minutes: 5
  278. env:
  279. TARGET: emqx/${{ needs.build.outputs.imgname }}
  280. EMQX_TAG: ${{ needs.build.outputs.version }}
  281. PGSQL_TAG: ${{ matrix.pgsql_tag }}
  282. run: |
  283. docker-compose \
  284. -f .ci/docker-compose-file/docker-compose-emqx-broker-cluster.yaml \
  285. -f .ci/docker-compose-file/docker-compose-pgsql-tls.yaml \
  286. up -d --build
  287. - name: wait docker compose up
  288. timeout-minutes: 5
  289. run: |
  290. while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
  291. echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
  292. sleep 5;
  293. done
  294. docker ps -a
  295. echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
  296. echo PGSQL_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' pgsql) >> $GITHUB_ENV
  297. echo CONFIG_PATH=$(docker inspect -f '{{ range .Mounts }}{{ if eq .Name "docker-compose-file_etc" }}{{ .Source }}{{ end }}{{ end }}' node1.emqx.io) >> $GITHUB_ENV
  298. - uses: actions/checkout@v2
  299. with:
  300. repository: emqx/emqx-fvt
  301. ref: v1.6.0
  302. path: scripts
  303. - uses: actions/setup-java@v1
  304. with:
  305. java-version: '8.0.282' # The JDK version to make available on the path.
  306. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  307. architecture: x64 # (x64 or x86) - defaults to x64
  308. - uses: actions/download-artifact@v2
  309. with:
  310. name: apache-jmeter.tgz
  311. path: /tmp
  312. - name: install jmeter
  313. timeout-minutes: 10
  314. env:
  315. JMETER_VERSION: 5.3
  316. run: |
  317. cd /tmp && tar -xvf apache-jmeter.tgz
  318. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  319. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  320. wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-2.0.2-jar-with-dependencies.jar
  321. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  322. - name: install jmeter plugin
  323. run: |
  324. 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
  325. - name: run jmeter
  326. run: |
  327. sudo /opt/jmeter/bin/jmeter.sh \
  328. -Jjmeter.save.saveservice.output_format=xml -n \
  329. -t scripts/automate-test-suite/${{ matrix.pgsql_type }}.jmx \
  330. -Droute="apps/emqx_auth_pgsql/test/emqx_auth_pgsql_SUITE_data" \
  331. -Dca_name="ca.pem" \
  332. -Dkey_name="client-key.pem" \
  333. -Dcert_name="client-cert.pem" \
  334. -Ddb_ip=$PGSQL_IP \
  335. -Dpgsql_ip=$PGSQL_IP \
  336. -Demqx_ip=$HAPROXY_IP \
  337. -Dpgsql_user="root" \
  338. -Dpgsql_pwd="public" \
  339. -Ddbname="mqtt" \
  340. -Dpgsql_db="mqtt" \
  341. -Dport="5432" \
  342. -Dconfig_path=$CONFIG_PATH \
  343. -Ddocker_path=".ci/docker-compose-file" \
  344. -l jmeter_logs/${{ matrix.pgsql_type }}_${{ matrix.pgsql_tag }}.jtl \
  345. -j jmeter_logs/logs/${{ matrix.pgsql_type }}_${{ matrix.pgsql_tag }}.log
  346. - name: check logs
  347. run: |
  348. if cat jmeter_logs/${{ matrix.pgsql_type }}_${{ matrix.pgsql_tag }}.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
  349. echo "check logs filed"
  350. exit 1
  351. fi
  352. - uses: actions/upload-artifact@v1
  353. if: always()
  354. with:
  355. name: jmeter_logs
  356. path: ./jmeter_logs
  357. http:
  358. runs-on: ubuntu-latest
  359. needs: build
  360. steps:
  361. - uses: actions/checkout@v2
  362. - uses: actions/download-artifact@v2
  363. with:
  364. name: emqx-docker-image-zip
  365. path: /tmp
  366. - name: load docker image
  367. env:
  368. imgname: ${{ needs.build.outputs.imgname }}
  369. version: ${{ needs.build.outputs.version }}
  370. run: |
  371. unzip -q /tmp/${imgname}-docker-${version}.zip -d /tmp
  372. docker load < /tmp/${imgname}-docker-${version}
  373. - name: docker compose up
  374. timeout-minutes: 5
  375. env:
  376. TARGET: emqx/${{ needs.build.outputs.imgname }}
  377. EMQX_TAG: ${{ needs.build.outputs.version }}
  378. MYSQL_TAG: 8
  379. run: |
  380. docker-compose \
  381. -f .ci/docker-compose-file/docker-compose-emqx-broker-cluster.yaml \
  382. -f .ci/docker-compose-file/docker-compose-mysql-tcp.yaml \
  383. -f .ci/docker-compose-file/docker-compose-enterprise-tomcat-tcp.yaml \
  384. up -d --build
  385. - name: wait docker compose up
  386. timeout-minutes: 5
  387. run: |
  388. while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
  389. echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
  390. sleep 5;
  391. done
  392. docker ps -a
  393. echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
  394. echo HTTP_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' Tomcat) >> $GITHUB_ENV
  395. echo MYSQL_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql) >> $GITHUB_ENV
  396. echo CONFIG_PATH=$(docker inspect -f '{{ range .Mounts }}{{ if eq .Name "docker-compose-file_etc" }}{{ .Source }}{{ end }}{{ end }}' node1.emqx.io) >> $GITHUB_ENV
  397. - uses: actions/checkout@v2
  398. with:
  399. repository: emqx/emqx-fvt
  400. ref: v1.6.0
  401. path: scripts
  402. - uses: actions/setup-java@v1
  403. with:
  404. java-version: '8.0.282' # The JDK version to make available on the path.
  405. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  406. architecture: x64 # (x64 or x86) - defaults to x64
  407. - uses: actions/download-artifact@v2
  408. with:
  409. name: apache-jmeter.tgz
  410. path: /tmp
  411. - name: install jmeter
  412. timeout-minutes: 10
  413. env:
  414. JMETER_VERSION: 5.3
  415. run: |
  416. cd /tmp && tar -xvf apache-jmeter.tgz
  417. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  418. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  419. wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-2.0.2-jar-with-dependencies.jar
  420. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  421. - name: install jmeter plugin
  422. run: |
  423. 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
  424. - name: run jmeter
  425. run: |
  426. sudo /opt/jmeter/bin/jmeter.sh \
  427. -Jjmeter.save.saveservice.output_format=xml -n \
  428. -t scripts/automate-test-suite/http_auth_acl.jmx \
  429. -Dmysql_ip=$MYSQL_IP \
  430. -Demqx_ip=$HAPROXY_IP \
  431. -Dweb_server_ip=$HTTP_IP \
  432. -Dconfig_path=$CONFIG_PATH \
  433. -Ddocker_path=".ci/docker-compose-file" \
  434. -l jmeter_logs/http_auth_acl.jtl \
  435. -j jmeter_logs/logs/http_auth_acl.log
  436. - name: check logs
  437. run: |
  438. if cat jmeter_logs/http_auth_acl.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
  439. echo "check logs filed"
  440. sudo cat /var/lib/docker/volumes/docker-compose-file_etc/_data/emqx.conf
  441. exit 1
  442. fi
  443. - uses: actions/upload-artifact@v1
  444. if: always()
  445. with:
  446. name: jmeter_logs
  447. path: ./jmeter_logs