Git/GitLab

GitLab CI Golang 배포

김 정출 2024. 7. 8. 17:18

GitLab CI Golang

GitLab CI 배포를 진행해보겠습니다.

Repository로 이동하여 BuildPipelines를 클릭합니다.

Template은 Golang으로 진행하겠습니다.

Template이 다음과 같이 생성됩니다.

  • 각 Pipline의 Jobs 설정
    • Example은 test → build → deploy의 Jobs들이 설정되어 있습니다.
  • Commit message 입력
  • Push 될 Branch 선택

다음을 Edit를 수정합니다.

  • syntaxcheck
    • go fmt: Formatting
    • go vet:
      • Unreachable code
      • Shadowed variables
      • bad syntax for struct tag value
      • no args in Error Call
      • Mutex Lock
      • UnSafePointer
  • build
    • go build
# This file is a template, and might need editing before it works on your project.
# You can copy and paste this template into a new `.gitlab-ci.yml` file.
# You should not add this template to an existing `.gitlab-ci.yml` file by using the `include:` keyword.
#
# To contribute improvements to CI/CD templates, please follow the Development guide at:
# https://docs.gitlab.com/ee/development/cicd/templates.html
# This specific template is located at:
# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Go.gitlab-ci.yml

image: golang:latest

variables:
  REPO_NAME: gitlab.com/fancian/map-api-server

before_script:
  - echo "start job at :" `$date`
  - echo "workspace is:" `$pwd`

after_script:
  - echo "done job at :" `$date`

stages:
  - check
  - build

syntaxcheck:
  stage: check
  script:
    - mkdir -p $GOPATH/src/$(dirname $REPO_NAME)
    - ln -svf $CI_PROJECT_DIR $GOPATH/src/$REPO_NAME
    - cd $GOPATH/src/$REPO_NAME
    - go fmt
    - go vet

compile:
  stage: build
  script:
    - GOOS=linux GOARCH=amd64 go build -o map-api-server
  only:
    refs:
      - main

Validate 탭 메뉴를 클릭하고 Validation Check를 진행합니다.

Visualize 탭 메뉴를 클릭하여 Pipeline을 확인해봅니다.


확인 이후 Commit Changes 를 클릭합니다.

Pipeline이 활성화 됩니다.

Main branch에 Merge 테스트 해보겠습니다.

해당 Pipeline 버튼을 클릭합니다. check stage를 클릭해 확인해봅니다.

syntax check가 진행됩니다.

완료가 되면 compile stage가 이어서 진행됩니다.

이를 통해 Main Branch에 Merge가 됨에 따라 build test를 진행하게 됩니다.

Main의 Sub branch를 여러 개 두어 build와 production deploy를 각 브랜치에 설정이 가능해집니다.

Reference