본 포스트에서는 Go 언어로 작성된 소프트웨어의 지속적 통합 및 지속적 전달 (CI/CD) 파이프라인을 구축하는 방법을 소개합니다. 이를 위해 Go 표준 라이브러리에 포함된 build
패키지를 사용하여 소스 코드를 빌드하고 테스트하는 자동화된 프로세스를 만들어보겠습니다.
1. go/build 패키지란?
go/build
패키지는 Go 언어로 작성된 소스 코드를 빌드하고 테스트하는 데 사용되는 내장 패키지입니다. 이 패키지는 프로젝트 디렉토리의 구조를 분석하고 필요한 의존성을 해결하여 소스 코드를 빌드하는 기능을 제공합니다.
2. CI/CD 파이프라인 구축을 위한 단계
아래 단계를 따라 Go 프로젝트용 CI/CD 파이프라인을 설정할 수 있습니다.
2.1. 프로젝트 설정
프로젝트 루트 디렉토리에 .travis.yml
과 같은 CI 도구 설정 파일을 생성하고, go.mod
파일을 포함하여 프로젝트에 Go 모듈을 설정합니다.
2.2. 테스트 작성
*_test.go
파일을 생성하여 코드의 단위 및 통합 테스트를 작성합니다. go test
명령어를 사용하여 테스트를 자동화합니다.
2.3. 빌드 스크립트 작성
빌드 스크립트를 작성하여 Go 프로젝트를 빌드하고 실행 가능한 이진 파일을 생성합니다.
2.4. CI/CD 설정
CI 도구에 Go 빌드 및 테스트 스크립트를 포함시키고, 레포지토리에 push될 때마다 자동으로 빌드 및 테스트가 수행되도록 설정합니다.
3. go/build 패키지를 사용한 CI/CD 파이프라인 구축 예제
아래는 go/build
패키지를 사용하여 CI/CD 파이프라인을 구축하는 예제 코드입니다.
package main
import (
"fmt"
"go/build"
"os"
"os/exec"
)
func main() {
pkg, err := build.Import("example.com/foo", "", build.FindOnly)
if err != nil {
fmt.Println(err)
return
}
cmd := exec.Command("go", "build", "-o", "app", pkg.ImportPath)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Build successful")
}
위 예제는 example.com/foo
패키지를 빌드하여 app
실행 파일을 생성하는 간단한 빌드 스크립트를 보여줍니다.
결론
go/build
패키지를 사용하면 Go 프로젝트의 CI/CD 파이프라인을 구축하는 과정을 자동화하고 효율적으로 관리할 수 있습니다. 이를 통해 팀은 소프트웨어의 품질을 유지하고, 지속적으로 소프트웨어를 배포할 수 있게 됩니다.