ความยากลำบากในการเขียน Go lib เอาไว้ใช้ในองค์กรมันระดับไหน เรามาลองทำด้วยตัวเองกัน โดยมีขั้นตอนดังนี้
- สร้าง library ขึ้นมาง่ายๆสักตัว โดยมีเงื่อนไขคือ จะต้องตั้งชื่อ module ตาม url ที่มันอยู่จริงเช่น ถ้า url ของมันจะอยู่ที่ gitlab.myhost.com/mygroup/mysubgroup/mylib ก็จะต้องตั้งชื่อ module ให้ตรงกันด้วยคำส่ง
go mod init gitlab.myhost.com/mygroup/mysubgroup/mylib
โดย repo นี้จะเป็น private repo นะครับ
เขียน project ขึ้นมาเรียกใช้ mylib จากข้อ 1 ซึ่งมันจะ go get มาไม่ได้ถ้าเรายังไม่ทำขั้นตอนต่อไปให้จบก่อน
เอา url ของ lib เต็มๆมาใส่เป็นค่าหนึ่งใน Go env เช่น
ซึ่งถ้า GOPRIVATE มีค่าเดิมของมันอยู่ ก็ให้เอามาต่อกันและใช้,
คั่น
export GOPRIVATE=gitlab.myhost.com/mygroup/mysubgroup/mylib
- โดยปกติเมื่อเราตั้งค่านี้ลงไป มันจะเอาค่านี้ไปใส่ไว้ในอีก 2 env ให้เองนั่นคือ
- GONOPROXY
- GONOSUBDB ให้ตรวจสอบดูว่า ถ้ามันยังไม่เอามาใส่ให้ ก็ช่วยมันนิดนึง ตัวอย่างเช่น
export GONOPROXY=gitlab.myhost.com/mygroup/mysubgroup/mylib
export GONOSUBDB=gitlab.myhost.com/mygroup/mysubgroup/mylib
ขึ้นตอนพิเศษเพื่อให้มันได้สิทธิ์เข้าไปถึง repo นั้นคือ ให้ไปสร้าง Access Tokens โดยให้สิทธิ์ api,read_api
แก้ไขไฟล์ ~/.netrc โดยเพิ่มข้อมูลแบบนี้เข้าไป
machine gitlab.myhost.com
login your_account
password your_access_token
ก็คือนำเอา Access Token ที่เพิ่งสร้างจากข้อ 5 มาใช้เป็น password
เพียงเท่านี้เราก็สามารถใช้คำสั่ง go get ได้แล้ว
go get gitlab.myhost.com/mygroup/mysubgroup/mylib
หลังจากทำทั้งหมดนี้แล้ว อย่าเพิ่งดีใจไป เพราะเราก็เห็นแล้วว่าขั้นตอนมันเยอะ และให้ลองคิดสถาพตอน push ขึ้นไปวิ่งใน CI/CD ดูว่ามันจะเกิดอะไรขึ้นบ้าง
เอาเป็นว่า ถ้าอยากจะทำแบบนี้จริงๆ ก็คงต้องคุยกันหลายๆคน เพื่อหาข้อสรุปกันดูก่อนว่าเป็นอย่างไร ต้องออกแรงตรงไหนอีก และคุ้มหรือไม่
ผมขออธิบายไว้เพียงแค่นี้นะครับ
Top comments (0)