- Trong GitHub Actions, có thể chỉ định shell dùng để thực thi khối
run: bằng từ khóa shell
- Trong workflow thì đây là tùy chọn, nhưng trong định nghĩa action riêng lẻ thì là mục bắt buộc
- Giá trị mặc định được tự động chọn theo hệ điều hành: Linux/macOS là
bash, Windows là pwsh
- Nếu đặt rõ
shell: bash, các cờ mặc định sau cũng sẽ được thêm vào: --noprofile --norc -eo pipefail
Có thể chỉ định bất kỳ tệp thực thi nào làm shell
- Thông thường rất dễ nghĩ rằng các giá trị có thể dùng cho
shell bị giới hạn
- Thực tế, mọi tệp thực thi có trong
$PATH đều có thể được dùng làm shell
- Nếu lệnh thực thi không nhận đầu vào từ tệp, cần truyền đối số đặc biệt
{0}
{0} sẽ được GitHub tự động thay thế bằng đường dẫn tới tệp tạm
Một số ví dụ thử nghiệm
- Cũng có thể dùng trình biên dịch C (
tcc) như một shell để chạy trực tiếp
- Cũng có thể thao tác
$PATH để tạo và dùng một shell bash giả
- GitHub không quan tâm giá trị ghi trong mục
shell thực chất là tệp thực thi nào
Hàm ý về bảo mật
- Trong GitHub Actions, ranh giới giữa ghi tệp và thực thi khá mờ nhạt (vẫn có khả năng thực thi qua
GITHUB_ENV, $GITHUB_PATH v.v.)
- Ngay cả những giá trị quen thuộc như
shell: bash cũng được tra cứu qua $PATH, chứ không dùng đường dẫn thực thi cố định như /bin/bash
- Trái với dự đoán, các giá trị như
python cũng được thực thi dựa trên đường dẫn thực tế, chứ không chỉ đơn thuần tham chiếu tới tool cache
2 bình luận
Chỉ nhìn vào repo github/runner-image thôi cũng thấy có khá nhiều gói đã được cài sẵn để có thể dùng ngay...
Tạo image là dung lượng đội lên 1GB ngay...
Ý kiến trên Hacker News
-xcủa bash để buộc in ra mọi lệnh được chạy trong workflow Actions. Điều này rất hữu ích cho việc debugrepository_dispatchScriptHandler.cschứa toàn bộ mã để chuẩn bị môi trường tiến trình, đối số, v.v.bashđể chạy bất kỳ chương trình nàogoevalvẫn chưa hỗ trợ trực tiếp đầu vào từ filegoeval