CICD với GITLAB
Em chào anh/chị ạ, em hiện mới qua để mò qua bên CI/CD 1 chút, thì hiện em đang dùng gitlab, em cài git runner trên server trên công ty, web chạy trên 1 VPS khác ( dùng pm2, k dùng docker). Em có chút thắc mắc là khi chạy xong test, thì mình sẽ cho SSH vào máy chủ để pull code và build mới lại thì để SSH type -o StrictHostKeyChecking=no như này có nguy hiểm k ạ, và quy trình chuẩn cho prod là như thế nào ạ. Với em đang có chút lỗi là khi SSH trên git runner này chạy lệnh ( ví dụ npm run build ) thì báo lỗi : command not found, nhưng em vẫn dùng privatekey đó SSH bằng bash trên máy thì chạy vẫn được npm. Em có setup CI/CD dùng docker thì được dolệnh docker khi SSH bằng git runner vẫn nhận. Mong được anh/chị giúp đỡ ạ.
1 CÂU TRẢ LỜI
StrictHostKeyChecking là để đảm bảo bạn đang connect đến đúng cái server mà bạn muốn, để bảo vệ bạn khỏi tấn công man-in-the-middle. Nếu bạn tự tin server chạy runner không thể bị tấn công kiểu này thì bạn có thể tắt đi cho đơn giản. Còn cách làm đầy đủ thì bạn lấy host key trên server như thế này.
cat /etc/ssh/ssh_host_*_key.pub | awk '{print "<IP hoặc hostname của server bạn dùng để SSH> " $1 " " $2}'
Sau đó lưu output thành một secret file tên là SSH_KNOWN_HOSTS
trên Gitlab rồi trong script CI bạn thêm
- mkdir -p ~/.ssh
- cp "$SSH_KNOWN_HOSTS" ~/.ssh/known_hosts
- chmod 0644 ~/.ssh/known_hosts
Hướng dẫn chi tiết hơn thì ở đây nhé https://docs.gitlab.com/ee/ci/jobs/ssh_keys.html#verifying-the-ssh-host-keys.
Còn SSH command không có npm với node thì bạn check trong file ~/.bashrc
, mặc định của Ubuntu và Debian thường sẽ có đoạn này.
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
Tức là nếu bạn chạy command qua SSH thì nó sẽ không chạy đoạn ở sau nữa, nên nếu bạn setup PATH=$PATH:...
ở cuối file như thường làm thì sẽ không có tác dụng nên sẽ không tìm được binary của node và npm. Bạn có thể cho đoạn setup PATH
lên trước đoạn này. Hoặc nếu dùng nvm thì chuyển đoạn này lên trên
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ]
Ngoài ra thì có thể dùng full path của node và npm. Bạn SSH vào server rồi chạy which npm
để lấy full path của binary rồi trong script thì bạn dùng cái full path đấy.
Đoạn npm em có fix đc rồi ạ, nhưng bây giờ k biết ssh vào như vậy liệu bảo mật có ổn k, do em cũng đọc được vài bài nói k nên để ssh vào prod, liệu cài git runner trên vps rồi cấp quyền cho user git runner liệu có tốt hơn k ạ?
@CVThien912 kiểm tra đường dẫn npm có đúng không, kiểm tra npm đã cài hay chưa, kiểm tra PATH của npm