Note
GitHub 호스트 실행기는 현재 GitHub Enterprise Server에서 지원되지 않습니다. GitHub public roadmap에 예정된 향후 지원에 대해 자세히 알아볼 수 있습니다.
소개
이 가이드에서는 Go 패키지를 빌드하고 테스트하고 게시하는 방법을 보여 줍니다.
GitHub 호스트 실행기에는 Go의 종속성을 포함하는 소프트웨어가 사전 설치된 도구 캐시가 있습니다. 최신 소프트웨어 및 사전 설치된 Go 버전의 전체 목록은 GitHub 호스팅 실행기 사용을(를) 참조하세요.
필수 조건
YAML 구문과 이를 GitHub Actions와 함께 사용하는 방법에 대해 잘 알고 있어야 합니다. 자세한 내용은 GitHub Actions에 대한 워크플로 구문을(를) 참조하세요.
Go 언어를 기본적으로 이해하는 것이 좋습니다. 자세한 내용은 Go 시작을 참조하세요.
Go 워크플로 템플릿 사용
빠르게 시작하려면 워크플로 템플릿을 리포지토리의 .github/workflows
디렉터리에 추가합니다.
GitHub는 대부분의 Go 프로젝트에서 작동하는 Go 워크플로 템플릿을 제공합니다. 이 가이드의 후속 섹션에서는 이 워크플로 템플릿을 사용자 지정하는 방법에 대한 예시를 제공합니다.
-
GitHub에서 리포지토리의 기본 페이지로 이동합니다.
-
리포지토리 이름 아래에서 작업을 클릭합니다.
-
리포지토리에 워크플로가 이미 있는 경우 새 워크플로를 클릭합니다.
-
"워크플로 선택" 페이지에는 권장되는 워크플로 템플릿의 선택 항목이 표시됩니다. "go"를 검색합니다.
-
지속적 통합을 클릭하여 워크플로 선택을 필터링합니다.
-
"Go - by GitHub Actions" 워크플로에서 구성을 클릭합니다.
"Go - by GitHub Actions" 워크플로 템플릿을 찾지 못하면 다음 워크플로 코드를 리포지토리의.github/workflows
디렉터리에 있는 새go.yml
파일에 복사합니다.YAML name: Go on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: self-hosted steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.20' - name: Build run: go build -v ./... - name: Test run: go test -v ./...
name: Go on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: self-hosted steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.20' - name: Build run: go build -v ./... - name: Test run: go test -v ./...
-
필요에 따라 워크플로를 편집합니다. 예를 들어 Go 버전을 변경합니다.
-
변경 내용 커밋을 클릭합니다.
Go 버전 지정
Go 버전을 지정하는 가장 쉬운 방법은 GitHub에서 제공하는 setup-go
작업을 사용하는 것입니다. 자세한 내용은 setup-go
작업을 참조하세요.
GitHub 호스팅 실행기에서 미리 설치된 Go 버전을 사용하려면 관련 버전을 작업의 속성에 setup-go
작업의 go-version
속성에 전달합니다. 이 작업은 각 실행기의 도구 캐시에서 특정 버전의 Go를 찾고 필수 이진 파일을 PATH
에 추가합니다. 이러한 변경 내용은 작업의 나머지 부분에 대해 유지됩니다.
setup-go
작업은 다양한 실행기 및 다양한 버전의 Go에서 일관된 동작을 보장하는 데 유용하므로 GitHub Actions로 Go를 사용하는 데 권장되는 방법입니다. 자체 호스트 실행기를 사용하는 경우 Go를 설치하고 이를 PATH
에 추가해야 합니다.
여러 버전의 Go 사용
name: Go on: [push] jobs: build: runs-on: ubuntu-latest strategy: matrix: go-version: [ '1.19', '1.20', '1.21.x' ] steps: - uses: actions/checkout@v4 - name: Setup Go ${{ matrix.go-version }} uses: actions/setup-go@v5 with: go-version: ${{ matrix.go-version }} # You can test your matrix by printing the current Go version - name: Display Go version run: go version
name: Go
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [ '1.19', '1.20', '1.21.x' ]
steps:
- uses: actions/checkout@v4
- name: Setup Go ${{ matrix.go-version }}
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
# You can test your matrix by printing the current Go version
- name: Display Go version
run: go version
특정 Go 버전 사용
1.20.8
과 같은 특정 버전의 Go를 사용하도록 작업을 구성할 수 있습니다. 또는 의미 체계 버전 구문을 사용하여 최신 부 릴리스를 가져올 수 있습니다. 이 예에서는 Go 1.21의 최신 패치 릴리스를 사용합니다:
- name: Setup Go 1.21.x uses: actions/setup-go@v5 with: # Semantic version range syntax or exact version of Go go-version: '1.21.x'
- name: Setup Go 1.21.x
uses: actions/setup-go@v5
with:
# Semantic version range syntax or exact version of Go
go-version: '1.21.x'
종속성 설치
종속성을 설치하는 데 go get
을 사용할 수 있습니다.
steps: - uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v5 with: go-version: '1.21.x' - name: Install dependencies run: | go get . go get example.com/octo-examplemodule go get example.com/octo-examplemodule@v1.3.4
steps:
- uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.21.x'
- name: Install dependencies
run: |
go get .
go get example.com/octo-examplemodule
go get example.com/octo-examplemodule@v1.3.4
종속성 캐싱
setup-go
작업을 사용하여 종속성을 캐시하고 복원할 수 있습니다. 기본값으로 캐싱은 setup-go
작업을 사용할 때 활성화됩니다.
setup-go
작업은 리포지토리 루트에서 종속성 파일 go.sum
을 검색하고 종속성 파일의 해시를 캐시 키의 일부로 사용합니다.
여러 종속성 파일이 사용되거나 서로 다른 하위 디렉터리에 있는 경우 cache-dependency-path
매개 변수를 사용할 수 있습니다.
- name: Setup Go uses: actions/setup-go@v5 with: go-version: '1.17' cache-dependency-path: subdir/go.sum
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.17'
cache-dependency-path: subdir/go.sum
사용자 지정 요구사항이 있거나 캐싱에 대한 세부적인 제어가 필요한 경우 cache
작업을 사용할 수 있습니다. 자세한 내용은 워크플로 속도를 높이기 위한 종속성 캐싱을(를) 참조하세요.
코드 빌드 및 테스트
코드를 빌드하고 테스트하기 위해 로컬에서 사용하는 것과 동일한 명령을 사용할 수 있습니다. 이 예시 워크플로에서는 작업에서 go build
및 go test
를 사용하는 방법을 보여 줍니다.
name: Go on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v5 with: go-version: '1.21.x' - name: Install dependencies run: go get . - name: Build run: go build -v ./... - name: Test with the Go CLI run: go test
name: Go
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.21.x'
- name: Install dependencies
run: go get .
- name: Build
run: go build -v ./...
- name: Test with the Go CLI
run: go test
워크플로 데이터를 아티팩트로 패키지
워크플로가 완료되면 분석을 위해 결과 아티팩트 업로드할 수 있습니다. 예를 들어 로그 파일, 코어 덤프, 테스트 결과 또는 스크린샷을 저장해야 할 수 있습니다. 다음 예시에서는 upload-artifact
작업을 사용하여 테스트 결과를 업로드하는 방법을 보여 줍니다.
자세한 내용은 워크플로에서 데이터 저장 및 공유을(를) 참조하세요.
name: Upload Go test results on: [push] jobs: build: runs-on: ubuntu-latest strategy: matrix: go-version: [ '1.19', '1.20', '1.21.x' ] steps: - uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v5 with: go-version: ${{ matrix.go-version }} - name: Install dependencies run: go get . - name: Test with Go run: go test -json > TestResults-${{ matrix.go-version }}.json - name: Upload Go test results uses: actions/upload-artifact@v3 with: name: Go-results-${{ matrix.go-version }} path: TestResults-${{ matrix.go-version }}.json
name: Upload Go test results
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [ '1.19', '1.20', '1.21.x' ]
steps:
- uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
- name: Install dependencies
run: go get .
- name: Test with Go
run: go test -json > TestResults-${{ matrix.go-version }}.json
- name: Upload Go test results
uses: actions/upload-artifact@v3
with:
name: Go-results-${{ matrix.go-version }}
path: TestResults-${{ matrix.go-version }}.json