Bước đầu học code python trên Gitlab

Nhiều lần tôi (ko phải 1 developer) có ý tưởng học code một tool đơn giản dùng cho công việc, nhưng mãi đến gần đây mới có đủ duyên để bắt đầu.

Ý tưởng thì có từ lâu. Thực ra cũng chả phải ý tưởng gì cho cam. Ở công ty suốt ngày dùng Slack và nhiều lần tương tác với Slack bot nên tôi nghĩ chắc món đó cũng đơn giản. Mà slack bot đơn giản nhất là nhắn tin ai đó đến lượt phụ trách cuộc họp hàng tuần.

Nghĩ thế tôi có thử tạo 1 Slack App, tuy nhiên sau vài click và khai báo tên App thì thấy ngày càng mông lung hơn nên cũng để đó.

Cho đến một cơ duyên khác. Vốn lười và hay gặp vấn đề cài cắm rồi config IDE nên tôi quyết định không cài cắm gì hết mà thay vào đó thử python trên gitlab của công ty. Bài viết tóm lược hành trình những bước đầu của tôi.

  1. Create Project and Repository

Đầu tiên là tạo tài khoản và tạo Project, cũng dễ, cứ dùng Google account công ty và bấm New Project thôi:

Vì đã có check “Initialize repository ….” ở bước trên nên sau khi tạo xong tôi đã có sẵn source Repo với branch main luôn.

2. Config CI/CD

Vốn dự định sẽ chạy thử code trên gitlab luôn nên tôi tìm hiểu và đi đến phần CI/CD luôn, rất tiện là đã có sẵn template cho Python ở đây, chỉ việc dùng thôi:

Sau khi chọn, sẽ được redirect đến thẳng Editor của file gitlab-ci.yml trong branch main mặc định. Ở đây tôi xoá béng những dòng ko hiểu và thêm 1 dòng để chạy code sẽ viết : – python hello.py (dòng cuối cùng trong ảnh dưới)

Sau đó thì Commit changes thôi. Tập làm quen với việc trên Gitlab ko có nút Save nha.

Ngay sau đó CI/CD Pipelines sẽ tự động chạy và tất nhiên là Fail. Tất nhiên rồi, đã làm gì có file hello.py, đã viết dòng code nào đâu.

(dùng gitlab công ty nên lợi cái là đã có sẵn CI/CD Runner, ko cần phải mất thêm công tự config cái đó)

3. Code tẹo nào

Giờ phải thêm file để code. Hơi bỡ ngỡ với việc này, phải vào Repository> Files và nhấn 1 cái icon:

Sau đó gõ tên file cần thiết (hello.py theo như đã bịa trước trong gitlab-ci.yml) và gõ nhanh

print("Hello flinters")

Sau đó tất nhiên là lại Commit changes và vào check CI/CD Pipelines chờ kết quả, dĩ nhiên là pass 🙂

Chụp màn hình kết quả chạy trên Gitlab và đi khoe.

4. Persist the data

Quay trở lại “bài tập” tạo 1 slack bot đơn giản nhắn tin ai đó đến lượt phụ trách cuộc họp hàng tuần. Tôi nhận thấy 1 vấn đề cần giải quyết là phải ghi nhớ lại được thông tin ai trong danh sách là người đã phụ trách lần cuối. Thông tin này là 1 loại thông tin đầu vào và thay đổi tuỳ từng lần chạy code nên bắt buộc phải được lưu trữ ở đâu đó ngoài source code. Như vậy tôi cần implement một loại cơ chế lưu trữ data “ra bên ngoài” như vậy để chuyển tiếp thông tin giữa các lần code chạy.

Một cách thông thường và đơn giản nhất, data cần chuyển tiếp giữa các lần code chạy sẽ được lưu ra file. Thế là tôi mày mò tra mạng các kiểu để viết hàm appendFile ở mức tối thiểu như sau:

def appendFile(fileName,content):
  with open(fileName, "a") as f:
  f.write(content)
  print("inside appendFile")
  f.close()
  return

rồi test cơ chế này 1 cách đàng hoàng, xem thông tin có được lưu không

appendFile("rotation.txt","đây là dòng mới thêm")
x = readFile("rotation.txt")
print(f"sau khi append thi : {x}")

5. Get stuck

Lại Commit changes. Kết quả là đoạn code trên hoạt động và in ra kết quả như mong muốn cho thấy sau khi append thì nội dung file đã được thay đổi. Tuy nhiên khi code chạy xong và mở lại file “rotation.txt” mà tôi đã để sẵn trên repo thì nội dung nó vẫn như vậy chẳng có gì thay đổi.

Hỏi thì được biết đoạn code appendFile của tôi có chạy và có làm thay đổi nội dung file rotation.txt nhưng chỉ trong phạm session mà Gitlab runner chạy, còn sau session đó thì file để trên repo này lại back lại như cũ, điều này có nghĩa là ý định persist data của tôi ko thể thực hiện được với kiểu làm như này.

Vậy là tèo!

Sẵn hôm sau có company trip, tôi có hỏi qua vài bạn trẻ thì tựu chung nếu muốn làm điều này tôi sẽ phải connect đến 1 DB nào đó bên ngoài rồi store data vào đó . Do tôi muốn “chạy toàn bộ trên gitlab” mà ko có môi trường deploy nên các bạn cũng chỉ bảo về lý thuyết tôi sẽ phải connect từ gitlab runner đến 1 DB online bên ngoài gitlab, còn thực tế làm thế nào thì …. còn… phải … tìm …. hiểu …..

Thấy đường xa vời vợi!

Về sau thế mà nút thắt này được giải quyết mà không phải theo cách đó. Làm thế nào thì hồi sau (bài viết sau) sẽ rõ.

One Comment

Add a Comment

Scroll Up