-
Notifications
You must be signed in to change notification settings - Fork 5
[Sun*CI V4] Build sun ci config reference #22
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
minhnv-1408
wants to merge
1
commit into
sun7pro:master
Choose a base branch
from
minhnv-1408:DOCS-sun-ci
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,201 @@ | ||
| Sun* CI là một CI/CD tool cây nhà lá vườn, được phát triển bởi chính Sun Asterisk. Tất cả các dự án tại Sun* có thể áp dụng tool này mà không lo đến các vấn đề bảo mật, phụ thuộc vào bên thứ ba hoặc các chi phí liên quan đến CI/CD. | ||
|
|
||
| File cấu hình của Sun* CI được lấy cảm hứng từ GitLab CI, bởi vậy các tham số trong file cấu hình cũng có phần tương tự. Chúng ta cùng tìm hiểu chi tiết nhé. | ||
|
|
||
| Trước hết, cũng như các tool CI/CD khác, file cấu hình `.sun-ci.yml` định nghĩa cấu trúc và thứ tự các pipelines cho project và xác định | ||
| - Tất cả các jobs trong workspace | ||
| - Thứ tự stages (các giai đoạn) | ||
| - Các gì để thực khi, gọi là `Sun* CI Runner` | ||
|
|
||
| Dưới đây là một ví dụ trong file cấu hình cho một project Laravel sử dụng Sun* CI: | ||
| ```yaml | ||
| workspace: true | ||
|
|
||
| stages: | ||
| - build | ||
| - test | ||
|
|
||
| jobs: | ||
| - name: build | ||
| stage: build | ||
| image: sunasteriskrnd/php-workspace:7.4 | ||
| services: | ||
| - image: postgres:12-alpine | ||
| name: postgres_test | ||
| environment: | ||
| POSTGRES_DB: xxx | ||
| POSTGRES_USER: xxx | ||
| POSTGRES_PASSWORD: xxx | ||
| environment: | ||
| APP_ENV: testing | ||
| cache: | ||
| - key: comopser_vendor_$CI_BRANCH | ||
| paths: | ||
| - vendor | ||
| before_script: | ||
| - cp .env.example .env.testing | ||
| - composer install | ||
| - php artisan key:generate | ||
| - php artisan migrate | ||
| script: | ||
| - composer sniff | ||
| - composer test | ||
| after_script: | ||
| - echo "Finish job" | ||
| only: | ||
| branches: | ||
| - master | ||
| events: | ||
| - pull_request | ||
| except: | ||
| branches: | ||
| - develop | ||
| events: | ||
| - push | ||
| artifacts: | ||
| paths: | ||
| - app/ | ||
| expires_in: 3 days | ||
|
|
||
| - name: test:node | ||
| stage: test | ||
| image: node:12-alpine | ||
| script: | ||
| - yarn | ||
| - yarn lint | ||
| ``` | ||
|
|
||
|
|
||
| # Chi tiết các tham số | ||
| ## stage | ||
| `stage` được định nghĩa cho mỗi job và dựa vào từ khóa `stages` định nghĩa toàn cục. Nó cho phép nhóm các jobs thành các stages khác nhau và các jobs trong cùng 1 stage được thực thi song song (tùy thuộc vào điều kiện nhất định). | ||
|
|
||
| Hãy nhìn lại ví dụ trên cho phần `stages` | ||
| ```yaml | ||
| stages: | ||
| - build | ||
| - test | ||
| ``` | ||
| Như vậy project đang sử dụng 2 stages và thứ tự chạy sẽ là `build` đầu tiên, nếu build thực hiện thành công sẽ chạy stage `test`. Trong một stage `test` bạn có thể định nghĩa nhiều các jobs con, ví dụ như bạn cần `test` cho `php` và `test` cho cả `javascript`, 2 jobs này rõ ràng là độc lập nên hoàn toàn có thể chạy song song. Để làm việc này chúng ta sử dụng 2 tham số `name` và `stage` sẽ được đề cập ở phần sau. | ||
| ```yaml | ||
| stages: | ||
| - build | ||
| - test | ||
| jobs | ||
| - name: test:php | ||
| stage: test | ||
| ... | ||
| - name: test:js | ||
| stage: test | ||
| ``` | ||
|
|
||
| ## images | ||
| Được sử dụng để chỉ định một Docker image làm môi trường cho jobs | ||
| ```yaml | ||
| image: ruby:2.6 | ||
| ``` | ||
| ## services | ||
| Được sử dụng để chỉ định một Docker image, được liên kết tới 1 base image trong `image` | ||
| - `services.*.name`: định nghĩa tên của service | ||
| ```yaml | ||
| jobs: | ||
| - name: build | ||
| stage: build | ||
| image: sunasteriskrnd/php-workspace:7.4 | ||
| services: | ||
| - image: postgres:12-alpine | ||
| name: postgres_test | ||
| environment: | ||
| POSTGRES_DB: xxx | ||
| POSTGRES_USER: xxx | ||
| POSTGRES_PASSWORD: xxx | ||
| ``` | ||
| ## script, before_script and after_script | ||
| - `script`: từ khóa bắt buộc, định nghĩa các câu lệnh chạy trong 1 job. Nó là các shell script được thực thi bởi Runner. | ||
| - `before_script` được sử dụng để định nghĩa tập các lệnh nên được chạy trước mỗi job. | ||
| - `after_script` được sử dụng để định nghĩa tập các lệnh các lệnh sẽ được chạy mỗi job bao gồm cả những job lỗi. | ||
| ```yaml | ||
| - name: build | ||
| stage: build | ||
| image: sunasteriskrnd/php-workspace:7.4 | ||
| before_script: | ||
| - cp .env.example .env.testing | ||
| script: | ||
| - composer install | ||
| after_script: | ||
| - php artisan key:generate | ||
| ``` | ||
| ## cache | ||
| `cache` được sử dụng để xác định tập các files, thư mục bên được cache lại giữa các jobs. Bạn chắc chắn sẽ cần cache lại các gói phụ thuộc (các file trong thư mục `vendor` hay `node_modules`), để không phải cài lại chúng quá nhiều lần. | ||
| ```yaml | ||
| - name: build | ||
| stage: build | ||
| image: sunasteriskrnd/php-workspace:7.4 | ||
| before_script: | ||
| - cp .env.example .env.testing | ||
| script: | ||
| - composer install | ||
| cache: | ||
| - key: comopser_vendor_$CI_BRANCH | ||
| paths: | ||
| - vendor | ||
| ``` | ||
| - `cache.*.paths`: tệp hoặc thư mục nào sẽ được cache. | ||
| - `cache.*.key`: định nghĩa quan hệ của cache, cho phép bạn có thể có 1 single cache cho tất cả các jobs, cache cho mỗi job hay cache cho mỗi branch. Điều đó phụ thuộc vào các [biến định nghĩa trước](https://ci.sun-asterisk.com/docs/guide/variables/predefined.html) của Sun\* CI. | ||
|
|
||
| ## environment | ||
| `environment` định nghĩa các biến môi trường được sử dụng trong job | ||
| ```yaml | ||
| jobs: | ||
| - name: build | ||
| stage: build | ||
| image: sunasteriskrnd/php-workspace:7.4 | ||
| environment: | ||
| APP_ENV: testing | ||
| ... | ||
| ``` | ||
|
|
||
| ## only / except | ||
| Đây là hai tham số định nghĩa khi nào các jobs sẽ chạy | ||
| - `only` định nghĩa tên nhánh và tags job sẽ chạy | ||
| - `except` định nghĩa tên nhánh và tags job sẽ không chạy | ||
| ```yaml | ||
| jobs: | ||
| - name: build | ||
| stage: build | ||
| image: sunasteriskrnd/php-workspace:7.4 | ||
| only: | ||
| branch: | ||
| - develop | ||
| - master | ||
| events: | ||
| - push | ||
| except: | ||
| branch: | ||
| - branch_1 | ||
| - branch_2 | ||
| events: | ||
| - pull_request | ||
| ``` | ||
| ## artifacts | ||
| `artifacts` được sử dụng để xác định tập các files, thư mục được đính kèm trong job | ||
| ```yaml | ||
| jobs: | ||
| - name: Build php | ||
| stage: build | ||
| image: sunasteriskrnd/php-workspace:7.4 | ||
| script: | ||
| - composer sniff | ||
| - composer test | ||
| artifacts: | ||
| paths: | ||
| - app/ | ||
| expires_in: 3 days | ||
| ``` | ||
| Hết rồi. | ||
|
|
||
| Các tham số cấu hình trong Sun \*CI khá đơn giản, bản thân tên của chúng cũng đã rõ cho mục đích sử dụng. Hi vọng với bài viết ngắn gọn này, bạn hoàn toàn sẵn sàng áp dụng Sun \*CI tool cho project của mình. | ||
|
|
||
| # Tài liệu tham khảo | ||
| - [Sun \*CI Document](https://ci.sun-asterisk.com/docs/guide/yaml/#configuration-example) | ||
| - [Config tham khảo cho project Laravel](https://github.com/minhnv2306/aws-training/pull/9) | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Cái này ví dụ build ra app hay build html từ react, node mới cần thôi chứ nhỉ? Laravel app thì có cần không?