DEV Community

Pallat Anchaleechamaikorn
Pallat Anchaleechamaikorn

Posted on

Go library in gitlab private repo

#go

ความยากลำบากในการเขียน Go lib เอาไว้ใช้ในองค์กรมันระดับไหน เรามาลองทำด้วยตัวเองกัน โดยมีขั้นตอนดังนี้

  1. สร้าง library ขึ้นมาง่ายๆสักตัว โดยมีเงื่อนไขคือ จะต้องตั้งชื่อ module ตาม url ที่มันอยู่จริงเช่น ถ้า url ของมันจะอยู่ที่ gitlab.myhost.com/mygroup/mysubgroup/mylib ก็จะต้องตั้งชื่อ module ให้ตรงกันด้วยคำส่ง
go mod init gitlab.myhost.com/mygroup/mysubgroup/mylib
Enter fullscreen mode Exit fullscreen mode

โดย repo นี้จะเป็น private repo นะครับ

  1. เขียน project ขึ้นมาเรียกใช้ mylib จากข้อ 1 ซึ่งมันจะ go get มาไม่ได้ถ้าเรายังไม่ทำขั้นตอนต่อไปให้จบก่อน

  2. เอา url ของ lib เต็มๆมาใส่เป็นค่าหนึ่งใน Go env เช่น
    ซึ่งถ้า GOPRIVATE มีค่าเดิมของมันอยู่ ก็ให้เอามาต่อกันและใช้ , คั่น

export GOPRIVATE=gitlab.myhost.com/mygroup/mysubgroup/mylib
Enter fullscreen mode Exit fullscreen mode
  1. โดยปกติเมื่อเราตั้งค่านี้ลงไป มันจะเอาค่านี้ไปใส่ไว้ในอีก 2 env ให้เองนั่นคือ
    • GONOPROXY
    • GONOSUBDB ให้ตรวจสอบดูว่า ถ้ามันยังไม่เอามาใส่ให้ ก็ช่วยมันนิดนึง ตัวอย่างเช่น
export GONOPROXY=gitlab.myhost.com/mygroup/mysubgroup/mylib
export GONOSUBDB=gitlab.myhost.com/mygroup/mysubgroup/mylib
Enter fullscreen mode Exit fullscreen mode
  1. ขึ้นตอนพิเศษเพื่อให้มันได้สิทธิ์เข้าไปถึง repo นั้นคือ ให้ไปสร้าง Access Tokens โดยให้สิทธิ์ api,read_api

  2. แก้ไขไฟล์ ~/.netrc โดยเพิ่มข้อมูลแบบนี้เข้าไป

machine gitlab.myhost.com
login your_account
password your_access_token
Enter fullscreen mode Exit fullscreen mode

ก็คือนำเอา Access Token ที่เพิ่งสร้างจากข้อ 5 มาใช้เป็น password

เพียงเท่านี้เราก็สามารถใช้คำสั่ง go get ได้แล้ว

go get gitlab.myhost.com/mygroup/mysubgroup/mylib
Enter fullscreen mode Exit fullscreen mode

หลังจากทำทั้งหมดนี้แล้ว อย่าเพิ่งดีใจไป เพราะเราก็เห็นแล้วว่าขั้นตอนมันเยอะ และให้ลองคิดสถาพตอน push ขึ้นไปวิ่งใน CI/CD ดูว่ามันจะเกิดอะไรขึ้นบ้าง

เอาเป็นว่า ถ้าอยากจะทำแบบนี้จริงๆ ก็คงต้องคุยกันหลายๆคน เพื่อหาข้อสรุปกันดูก่อนว่าเป็นอย่างไร ต้องออกแรงตรงไหนอีก และคุ้มหรือไม่

ผมขออธิบายไว้เพียงแค่นี้นะครับ

Top comments (0)