Github action
Github action: là công cụ giúp chúng ta có thể build code sau đó chạy các câu lệnh mà chúng ta muốn trên github.
Dưới đây là 1 ví dụ về file github action cho việc thực thi Postman API test && unit test .
Tạo pull request vào branch main
:
- github action sẽ dùng code head branch.
- Khi đã có pull request thì head branch có push commit thì cũng được re-run lại.
- Pull request đang ở trạng thái conflict thì sẽ ko được trigger
Push code lên branch main
:
- github action sẽ dùng code main branch.
Example
name: Postman Integration test & Unit test
on:
push:
branches:
- main
pull_request:
branches:
- main
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
jobs:
aws_cdk:
runs-on: ubuntu-20.04
steps:
- name: pull code
uses: actions/checkout@v2
- name: container up
shell: bash
run: |
docker-compose up --build -d
docker-compose logs db
- name: init for integration test
id: init_for_integration_test
run: make init_integration
- name: newman install
run: sudo npm install -g newman
- name: Postman test
id: excute_integration_test
run: newman run ./integration_test/demo.postman_collection.json -e ./integration_test/demo.postman_environment.json
- name: run seed for unit test
id: prepare_database_for_unit_test
run: |
docker-compose exec -T app php artisan migrate:refresh
docker-compose exec -T app php artisan db:seed --class=DatabaseSeeder
- name: run UnitTest
id: excute_unit_test
run: docker-compose exec --user root -T app php artisan test
- name: Slack Notification on Success
if: success()
uses: rtCamp/action-slack-notify@v2
env:
SLACK_CHANNEL: ${{ secrets.SLACK_CHANNEL }}
SLACK_TITLE: テスト成功
SLACK_MESSAGE: おめでとう!
SLACK_COLOR: good
- name: Slack Notification on Failure
uses: rtCamp/action-slack-notify@v2
if: failure()
env:
SLACK_CHANNEL: ${{ secrets.SLACK_CHANNEL }}
SLACK_TITLE: テスト失敗
SLACK_MESSAGE: "Postmanテスト初期化 : ${{ steps.init_for_integration_test.conclusion }}\nPostmanテスト実施 : ${{ steps.excute_integration_test.conclusion }}\n単体テストデータ準備 : ${{ steps.prepare_database_for_unit_test.conclusion }}\n単体テスト実行 : ${{ steps.excute_unit_test.conclusion}}"
SLACK_COLOR: danger
Chú ý khi dùng docker-compose
command trong github action
- Chỉ định
-T
:
Nếu không chỉ định -T sẽ bị lỗi như bên dưới
docker-compose exec app composer install
the input device is not a TTY
make: *** [Makefile:11: init_integration] Error 1
Error: Process completed with exit code 2.
- Chỉ định
--user root
:
user/group trong docker đều là kiểu dạng số như bên dưới, trong khi user thực excute lại là www-data. Nên nếu câu lệnh tạo file/folder thì cần thêm option --user root
file/folder permission inside docker:
docker-compose exec -T app ls -la
total 1144
drwxr-xr-x 12 1001 121 4096 May 21 09:42 .
drwxr-xr-x 1 root root 4096 May 21 09:45 ..
drwxr-xr-x 12 1001 121 4096 May 21 09:42 app
-rwxr-xr-x 1 1001 121 1686 May 21 09:42 artisan
drwxr-xr-x 3 1001 121 4096 May 21 09:42 bootstrap
-rw-r--r-- 1 1001 121 2010 May 21 09:42 composer.json
Dùng secrets để đưa các biến số môi trường
${{ secrets.SLACK_WEBHOOK_URL }}