Asked Oct 25th, 4:01 a.m. 173 0 1
  • 173 0 1
+1

CICD với GITLAB

Share
  • 173 0 1

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 đỡ ạ.

Avatar Thiện Cao Văn @CVThien912
Oct 25th, 4:02 a.m.

Screenshot from 2024-10-24 18-01-57.png

0
| Reply
Share
Avatar Nguyễn Ngọc Thiên @ThienNguyen123
Oct 25th, 5:01 a.m.

@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

0
| Reply
Share

1 ANSWERS


Answered Oct 25th, 7:03 a.m.
Accepted
+2

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.

Share
Avatar Thiện Cao Văn @CVThien912
Oct 25th, 4:38 p.m.

Đ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 ạ?

0
| Reply
Share
Viblo
Let's register a Viblo Account to get more interesting posts.