Инструментарий для тестирования, работы с контейнерами и образами как в локальном окружении, так и в CI.
jenkins_lib
- библиотеки для включения вJenkinsfile
.
jenkins_lib/
├── pipeDefault.groovy Простейший pipeline для работы с использованием docker registry.
└── storeArtifacts.groovy Сохранение gz сжатых артефактов Jenkins job.
-
Jenkinsfile
- пример Jenkinsfile, использующегоbuild_utils
, и он же используется для тестированияbuild_utils
репозитория в Jenkins. -
make_lib
- библиотеки к Makefile для запуска make targets сdocker run
,docker-compose
,docker build
,docker push
.
make_lib/
├── utils_common.mk Подключается в остальные `.mk` файлы. Содержит общие переменные и функции.
├── utils_container.mk Инструментарий для запуска таргетов в контейнере с `docker run` или `docker-compose`.
├── utils_image.mk Работа с образами (build, push).
└── utils_repo.mk Клонирование или синхронизация отдельных репозиториев.
sh/
- useful shell scripts (e.g. used by make_lib)
sh/
├── as_user.sh Create specific user in container and run command as this user.
├── functions.sh Common functions library.
├── getstage3.sh Download any latest stage3 and optionaly do something with it.
└── repo-init.sh Clone or sync any git repository.
examples
- пример использованияbuild_utils
.
examples/
├── Dockerfile.sh Шаблон для генерации Dockerfile.
├── Makefile Пример Makefile, использующий make_lib.
├── docker-compose.sh Шаблон для генерации docker-compose.yml.
└── dummy_service.sh Сервис-заглушка, как пример приложения.
- Добавить git сабмодуль:
git submodule add -b master [email protected]:rbkmoney/build_utils.git build_utils
- Обновить Makefile, выставляя необходимые переменные и подключая библиотеки. Например, для
erlang
проекта:
SUBMODULES = build_utils
SUBTARGETS = $(patsubst %,%/.git,$(SUBMODULES))
UTILS_PATH := build_utils
TEMPLATES_PATH := .
# Name of the service
SERVICE_NAME := {{my_service}}
# Service image default tag
SERVICE_IMAGE_TAG ?= $(shell git rev-parse HEAD)
# The tag for service image to be pushed with
SERVICE_IMAGE_PUSH_TAG ?= $(SERVICE_IMAGE_TAG)
# Base image for the service
BASE_IMAGE_NAME := service_erlang
BASE_IMAGE_TAG := $(BASE_IMAGE_TAG) # Replace with the current version (tag) for service_erlang image!
BUILD_IMAGE_TAG := $(BUILD_IMAGE_TAG) # Replace with the current version (tag) for build image!
CALL_ANYWHERE := all submodules rebar-update compile xref lint dialyze test start devrel release clean distclean
# Hint: 'test' might be a candidate for CALL_W_CONTAINER-only target
CALL_W_CONTAINER := $(CALL_ANYWHERE)
.PHONY: $(CALL_W_CONTAINER)
all: compile
-include $(UTILS_PATH)/make_lib/utils_container.mk
-include $(UTILS_PATH)/make_lib/utils_image.mk
$(SUBTARGETS): %/.git: %
git submodule update --init $<
touch $@
submodules: $(SUBTARGETS)
Еще примеры _Makefile'ов_ для `erlang` из [erlang-service-template](https://github.com/rbkmoney/erlang-service-template/blob/master/erlang-service-files/Makefile) и [hellgate](https://github.com/rbkmoney/hellgate/blob/master/Makefile).
-
Добавить
Dockerfile.sh
шаблон в корень своего репозитория, взяв за основу examples/Dockerfile.sh. Поправить инструкции:- MAINTAINER
- COPY
- CMD
- WORKDIR
Не забыть:
chmod 755 Dockerfile.sh
-
Добавить
docker-compose.sh
шаблон в корень своего репозитория, взяв за основу examples/docker-compose.sh. Если есть необходимость, добавить в описание сервисы, от которых зависит ваш.Не забыть:
chmod 755 docker-compose.sh
-
Добавить
Jenkinsfile
в корень своего репозитория. Смотри пример Jenkinsfile. Готовый стандандартынй Jenkinsfileerlang
проекта (надо заменить{{name}}
на название проекта). -
Для удобства добавить в
.gitignore
правила из .gitignore.
Далее при необходимости обновить версию сабмодулей (взять последнюю доступную на бранче):
git submodule update --remote