- Published on
[Basic] Tự động hóa việc triển khai với Github Actions
Mình đặt kịch bản là mình đang có 1
repo
chính, sau đó mình fork cáirepo
chính đó ra thành 1repo
mới và mình muốn tự động cập nhậtrepo
của mình nếu thằngrepo
chính được cập nhật. Để tìm hiểu cách giải quyết vấn đề trên bắt đầu với nội dung bên dưới nào!
What's Github Action?
GitHub Actions là một nền tảng CI/CD tích hợp sẵn trên GitHub, cho phép tự động hóa toàn bộ quy trình phát triển phần mềm.
Mặc dù nó không quá mới mẻ với nhiều người, nhưng trong bài viết hôm này mình chia sẻ cách triển khai cơ bản với Github Actions cho những ai chưa biết nó là gì!
Các thành phần chính của GitHub Actions
Workflow: Workflow là một chuỗi các tiến trình tự động mà bạn có thể thiết lập trong repository của mình. Workflows được tạo từ một hoặc nhiều job và có thể được lên lịch hoặc kích hoạt bằng các sự kiện như push, pull request, release, hoặc các sự kiện tùy chỉnh khác.
Jobs: Mỗi workflow chứa ít nhất một job. Job là một tập hợp các bước thực hiện một công việc cụ thể, ví dụ như kiểm tra mã nguồn, xây dựng ứng dụng, hoặc triển khai lên môi trường production.
Steps: Mỗi job bao gồm một hoặc nhiều bước (steps). Mỗi bước thực hiện một tác vụ cụ thể, chẳng hạn như cài đặt môi trường, tải mã nguồn, chạy các lệnh, hoặc gửi thông báo.
Actions: Là các tập lệnh hoặc phần mềm được chia sẻ, có thể tái sử dụng trong các bước của job. GitHub cung cấp nhiều actions có sẵn, và bạn cũng có thể tạo các actions của riêng mình hoặc sử dụng actions từ cộng đồng.
Runners: Là các máy ảo hoặc môi trường mà các jobs được thực thi. GitHub cung cấp runners được lưu trữ miễn phí, nhưng bạn cũng có thể sử dụng các runners tự lưu trữ (self-hosted runners) để có nhiều quyền kiểm soát hơn đối với môi trường thực thi.
Artifacts: Là các tệp được tạo ra bởi các workflows và có thể được lưu trữ hoặc chia sẻ giữa các jobs.
Secrets: Là các thông tin nhạy cảm (như API keys, tokens) được mã hóa và lưu trữ an toàn. Secrets có thể được sử dụng trong các workflows mà không làm lộ thông tin nhạy cảm này.
graph TD subgraph GitHub Actions A[Events] -->|Kích hoạt| B[Workflows] B -->|Gồm các| C[Jobs] C -->|Gồm các| D[Steps] D -->|Sử dụng| E[Actions] F[Runners] -->|Thực thi| C G[Artifacts] -->|Tạo bởi| C H[Secrets] -->|Sử dụng trong| B end
subgraph workflow.yaml B end
Demo
Quay lại kịch bản mình dề cập trước đó.
Mình đang có 1
repo
chính, sau đó mình fork cáirepo
chính đó ra thành 1repo
mới và mình muốn tự động cập nhậtrepo
của mình nếu thằngrepo
chính được cập nhật.
- Tạo folder
.github/workflows
sau đó tạo fileupdate-fork.yml
- Cấu hình file
update-fork.yml
- Tạo lịch chạy workflow
Cài đặt schedule
để gọi tự động thực thi workflow
on:
schedule:
- cron: '0 0 * * *' # Runs daily at midnight
và workflow_dispatch
cho phép chạy thủ công workflow từ GitHub Actions UI.
- Merge các cập nhật từ repo gốc vào repo fork's master branch
B1. Dùng actions/checkout@v2 để checkout sang repo hiện tại
B2. Cài đặt thông tin git mặc định cho workflow này.
B3. Thêm upstream repo > nạp các cập nhật > merge vào master.
B4. Push các thay đổi vào lại fork's master branch của bạn với GitHub token
- Final file:
- Repository Secrets: Ensure that the
GITHUB_TOKEN
is properly set up in your repository. This token is usually available by default, but you can verify it under Settings > Secrets and variables > Actions.
name: Update Fork
on:
schedule:
- cron: '0 0 * * *' # Runs daily at midnight
workflow_dispatch: # Allows manual trigger from GitHub Actions UI
jobs:
update-fork:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v2
with:
repository: wtmhcmc/sudocode.git
token: ${{ secrets.GH_TOKEN }}
ref: master
fetch-depth: 0 # Fetch all history for all branches and tags
- name: Set up Git
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
- name: Add upstream repository
run: |
git remote add upstream https://github.com/Women-Techmakers-HCMC/sudocode.git
git fetch upstream
git checkout master
git merge upstream/master
- name: Push changes
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
run: |
git push origin master
This GitHub Actions workflow file is used to automatically update a forked repository from its upstream repository. Here’s a breakdown of each section and its components:
Name
name: Update Fork: The name of the workflow, which will appear in the GitHub Actions UI.
Triggers
on: Specifies the events that trigger the workflow. schedule: Runs the workflow based on a cron schedule. cron: '0 0 * * *': Runs the workflow daily at midnight UTC. workflow_dispatch: Allows the workflow to be manually triggered from the GitHub Actions UI.
Jobs
jobs: Defines the jobs that run as part of the workflow. update-fork: The name of the job. runs-on: ubuntu-latest: Specifies the environment to run the job in (an Ubuntu virtual machine).
Steps
steps: Lists the individual steps that make up the job.
- Checkout the repository
- name: Checkout the repository
uses: actions/checkout@v2
with:
repository: wtmhcmc/sudocode.git
token: ${{ secrets.GH_TOKEN }}
ref: master
fetch-depth: 0
uses: actions/checkout@v2: Uses the checkout action to clone the specified repository. repository: wtmhcmc/sudocode.git: Specifies the repository to clone. token: ${{ secrets.GH_TOKEN }}
: Uses a secret token for authentication. ref: master: Checks out the master branch. fetch-depth: 0: Fetches all history for all branches and tags.
- Set up Git
- name: Set up Git
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
Configures Git with a user name and email for committing changes.
- Add upstream repository
- name: Add upstream repository
run: |
git remote add upstream https://github.com/Women-Techmakers-HCMC/sudocode.git
git fetch upstream
git checkout master
git merge upstream/master
Adds the upstream repository as a remote named upstream. Fetches the latest changes from the upstream repository. Checks out the master branch. Merges the changes from the upstream/master branch into the local master branch.
- Push changes
- name: Push changes
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
run: |
git push origin master
Pushes the updated master branch to the forked repository on GitHub.
This workflow automates the process of keeping a forked repository up to date with its upstream repository by:
Checking out the forked repository. Setting up Git with the necessary configurations. Fetching and merging changes from the upstream repository. Pushing the updated changes back to the forked repository.
Logs - kiểm tra chi tiết triển khai workflow
Kiểm tra nhật ký chi tiết của quá trình chạy workflow để xác định bất kỳ lỗi hoặc sự cố có thể gặp, bằng các truy cập tab Actions trong repo của bạn và kiểm tra chi tiết từng workflow tương ứng.
- Github Action tab:
- Workflow log details:
- Error logs:
End.
Với những định nghĩa ngắn gọn và một ví dụ nhỏ ở trên, hy vọng giúp bạn cơ bản biết được Github Action
là gì.
Bạn có thể tìm hiểu sâu hơn về Github Action tại đây