[Go] Go 언어를 이용해서 스크립트 파일 만들기

심의지·2023년 9월 18일

golang

목록 보기
1/1

이전 시간에 docker를 통해서 테스트를 실행하는 로직 자체는 만들었는데

프로그램 한번 눌렀을때 진행이 되는것이 편할거 같아서 script 파일을 하나 만들기로 했습니다.
그래서 어떻게 할까 고민중에 golang을 공부도 할겸 리눅스까지도 크로스컴파일이 되어야 하기 때문에 golang으로 간단한 스크립트 문을 만들기로 했습니다.

간단하게 스크립트 문이기 때문에 window에서 cmd를 통해서 파일을 실행시키는 로직 자체를 만들어 주기로 했습니다.

순서는 이러합니다.

  1. docker 와 docker-compose 의 정상적인 설치 확인
    • 없는 경우 : docker 와 docker-compose를 설치하라는 알림
    • 있는 경우 : 다음 로직 진행
  2. 사용할 docker image가 정상적으로 있는지 확인
    • 없는 경우 : image가 없는 경우 image를 등록
    • 있는 경우 : docker-compose 파일을 구동함으로 파일 실행
  3. docker-compse 파일을 실행

굉장히 단순한 스크립트 파일을 만드는 거라 로직 자체는 그렇게 어려운것이 존재하지는 않습니다.

package main

import (
	"fmt"
	"os"
	"os/exec"
	"runtime"
	"strings"
	"time"
)

func main() {
	args := os.Args
	customCmd := "docker"
	if len(args) > 1 {
		customCmd = args[1]
	}
	executeCommand(customCmd)
	executeCommand("docker-compose")
	fmt.Println("정상적으로 docker 및 docker-compose가 설치된것을 확인했습니다.")
	executeCommand("docker images")
	fmt.Println("정상적으로 docker image가 설치된것을 확인했습니다.")
	fmt.Println("자동 검사가 진행중입니다. 잠시만 기다려 주세요.")
	executeCommand("docker-compose up")
	fmt.Println("검사가 완료되었습니다. SLACK을 확인해주세요")
	time.Sleep(5 * time.Second)

}

func executeCommand(command string) {
	cmd := exec.Command("cmd", "/c", command)
	if runtime.GOOS != "windows" {
		stringArray := strings.Split(command, " ")
		cmd = exec.Command(command)
		if len(stringArray) > 1 {
			cmd = exec.Command(stringArray[0], stringArray[1])
		}
	}
	stdout, err := cmd.CombinedOutput()

	if err != nil {
		fmt.Println("ERROR : docker 및 docker-compose가 제대로 설치되었는지 확인해주세요")
		time.Sleep(5 * time.Second)
		panic(err)
	}

	if !strings.Contains(string(stdout), "autotest") && strings.Contains(command, "docker images") {
		fmt.Println("docker image을 불러오고 있습니다. 시간이 소요될 수 있습니다.")
		dockerCmd := exec.Command("cmd", "/c", "docker load -i test.tar")
		if runtime.GOOS != "windows" {
			dockerCmd = exec.Command("docker", "load", "-i", "test.tar")
		}
		stdoutImage, errImage := dockerCmd.CombinedOutput()
		if errImage != nil {
			fmt.Println("ERROR : .tar파일이 제대로있는지 확인해주세요.")
			time.Sleep(5 * time.Second)
			panic(err)
		}

		fmt.Println(string(stdoutImage))
	}
}

위와 같이 window용과 linux용 script를 만들었습니다.

윈도우 용 build 명령어
set GOOS=windows
set GOARCH=amd64
go build main.go

리눅스 용 build 명령어
set GOOS=linux
set GOARCH=amd64 -> 해당 아키텍쳐는 다를수 있으니 확인하고 할것
go build main.go

해당 명령어를 통해서 build를 하였고 main.exe를 누르면 정상적으로 동작하는것을 확인했습니다.

profile
나눠주는 삶을 살고 싶습니다.

0개의 댓글