Khi làm việc với GitLab CI/CD, bạn có thể gặp phải lỗi “Permission Denied” (Quyền bị từ chối) khi cố gắng đẩy (push) các thay đổi lên kho lưu trữ (repository). Lỗi này thường xuất hiện khi GitLab Runner không có đủ quyền để thực hiện các thao tác trên kho lưu trữ. Bài viết này sẽ giải thích nguyên nhân của vấn đề và cung cấp một số giải pháp để khắc phục.
Lỗi “Permission Denied” không đơn giản chỉ là vấn đề về cấu hình git config --global user.email
và git config --global user.name
. Mặc dù việc thiết lập này quan trọng để xác định danh tính người thực hiện các thay đổi, nó không cấp quyền xác thực thực tế để đẩy các nhánh (branch). Xác thực được xác định bởi URL nguồn gốc (origin URL), mà GitLab xử lý ngầm khi nhân bản (clone) kho lưu trữ. Khi cần thay đổi kho lưu trữ, bạn cần chỉ định phương thức xác thực rõ ràng.
Một phương pháp hiệu quả là thay đổi phương thức xác thực bằng cách xác định một URL origin
mới sử dụng HTTPS với OAuth. Để thực hiện điều này, bạn cần tạo một access token. Có hai lựa chọn:
-
Project Access Token: Tạo một Project Access Token với quyền
read_repository
vàwrite_repository
. Lưu token này ở cấp dự án dưới dạng biến CI/CD, ví dụ:OAUTH_TOKEN
. Điều này cho phép một “bot” đẩy các thay đổi lên nhánh. -
Personal Access Token: Nếu bạn không muốn sử dụng bot, bạn có thể tạo Personal Access Token và lưu nó dưới dạng biến CI/CD trong dự án.
Sau khi có access token, bạn có thể sử dụng nó để xác định origin
mới trong phần before_script
của tệp .gitlab-ci.yml
:
before_script:
- git remote remove origin
- git remote add origin https://oauth2:$OAUTH_TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH.git
Đoạn mã này loại bỏ origin
hiện tại và thêm một origin
mới sử dụng access token để xác thực. Sau khi thực hiện, bạn sẽ có thể thực hiện các thao tác đẩy trong phần script
của tệp .gitlab-ci.yml
.
Ngoài ra, bạn cũng cần kiểm tra quyền của người dùng GitLab và đảm bảo rằng họ có quyền ghi (write access) vào kho lưu trữ. Nếu bạn đang sử dụng Deploy Keys, hãy đảm bảo rằng chúng đã được cấu hình chính xác và có quyền ghi.
Tóm lại, khi bạn gặp lỗi “You Are Not Allowed” trong GitLab CI/CD, điều quan trọng là phải xem xét các khía cạnh sau:
- Xác thực: Đảm bảo rằng GitLab Runner có phương tiện xác thực để đẩy các thay đổi. Sử dụng Project Access Token hoặc Personal Access Token để cung cấp quyền truy cập cần thiết.
- Quyền: Kiểm tra quyền của người dùng GitLab và Deploy Keys để đảm bảo rằng họ có quyền ghi vào kho lưu trữ.
- Cấu hình Git: Xác minh rằng
git config
đã được thiết lập chính xác, mặc dù điều này không trực tiếp giải quyết vấn đề về quyền.
Bằng cách xem xét cẩn thận các yếu tố này, bạn có thể chẩn đoán và giải quyết lỗi “Permission Denied” một cách hiệu quả, đảm bảo quy trình CI/CD của bạn hoạt động trơn tru.