Cicd — Настройка Golang И Circle Ci

  • Автор темы Arrapsehophat30
  • Обновлено
  • 17, Oct 2024
  • #1

Go и DevOps — это новые вещи для меня. Я хотел бы настроить CI, который тестирует и собирает мой модуль, а затем сохраняет артефакты для загрузки. Кроме того, было бы неплохо кэшировать зависимости для следующих сборок.

Я не понимаю, как это сделать, используя подкаталог для продукта go. Я хочу, чтобы мой репозиторий git выглядел так:

GOPATH

go.mod

#!/bin/bash -eo pipefail
go build -o ./bin/hello.exe github.com/{USER}/{REPO_ROOT}/go/hello
can't load package: package github.com/{USER}/{REPO_ROOT}/go/hello: cannot find package "github.com/{USER}/{REPO_ROOT}/go/hello" in any of:

/usr/local/go/src/github.com/{USER}/{REPO_ROOT}/go/hello (from $GOROOT)

/go/src/github.com/{USER}/{REPO_ROOT}/go/hello (from $GOPATH)

Exited with code exit status 1
CircleCI received exit code 1

Конечно, {USER} заменяется моим именем пользователя GitHub, а {REPOSITORY_ROOT} — это имя репозитория.

На данный момент у меня есть следующий config.yml, который не работает.

version: 2
jobs:

build:

working_directory: ~/project/go

docker:

- image: circleci/golang:1.9

steps:

- checkout:

path: ~/project/

- run: mkdir bin

- run: go get -v -t -d ./...

- run: go test -v ./...

- run: go build -o bin/hello.exe github.com/{USER}/{REPOSITORY_ROOT}/go/hello

- store_artifacts:

path: bin/

destination: hello-app

Ошибка в команде сборки:

module github.com/{USER}/{REPOSITORY_ROOT}/go

go 1.14

Я знаю, что модуль находится за пределами

+ repository_root/

+ go/

- go.mod

- go.sum

+ hello/

- main.go

+ cpp/

+ python/

+ .circleci/
but I have the same setup on my local machine and the same build command works just fine.

#cicd #circleci #go

Arrapsehophat30


Рег
01 Jan, 2011

Тем
66

Постов
177

Баллов
537
  • 25, Oct 2024
  • #2

Мой подход сейчас — всегда упаковывать процесс сборки в Dockerfile. Т.е. вот Dockerfile для одного из моих проектов Go с открытым исходным кодом:

https://github.com/relizaio/relizaGoClient/blob/master/Dockerfile

Примечание: если вы используете модули go (что, похоже, так и есть), замените

docker build
with
go mod
на стадии сборки. Кстати, пропал
RUN go mod download
instruction might be the reason for your build failure in the current setup.

Затем в вашем CI просто выполните

RUN go get -d -v ./...
instruction, and then copy your artifact from the container if you need it outside.

Ключевое преимущество: вы можете локально проверить процесс сборки на основе того же файла Dockerfile и перенести его на любой инструмент CI.

 

Goo!


Рег
12 Jun, 2006

Тем
60

Постов
191

Баллов
511
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно