[go] go/build 패키지를 활용한 CI/CD 파이프라인 구축

본 포스트에서는 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 파이프라인을 구축하는 과정을 자동화하고 효율적으로 관리할 수 있습니다. 이를 통해 팀은 소프트웨어의 품질을 유지하고, 지속적으로 소프트웨어를 배포할 수 있게 됩니다.