DEV Community

Pallat Anchaleechamaikorn
Pallat Anchaleechamaikorn

Posted on

1

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 ดูว่ามันจะเกิดอะไรขึ้นบ้าง

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

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

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs