wip
parent
54e3f7f41a
commit
ce24ab6fc2
@ -1,8 +1,54 @@
|
||||
from .domain import Build
|
||||
from .python_util import execute
|
||||
from .domain import Build, DockerBuild
|
||||
from .infrastructure import FileApi, ResourceApi, DockerApi
|
||||
|
||||
|
||||
class BuildService():
|
||||
def __init__(self):
|
||||
self.file_api = FileApi()
|
||||
|
||||
def initialize_build_dir(self, build: Build):
|
||||
execute('rm -rf ' + build.build_path(), shell=True)
|
||||
execute('mkdir -p ' + build.build_path(), shell=True)
|
||||
self.file_api.clean_dir(build.build_path())
|
||||
|
||||
class DockerBuildService():
|
||||
def __init__(self):
|
||||
self.build_service = BuildService()
|
||||
self.file_api = FileApi()
|
||||
self.resource_api = ResourceApi()
|
||||
self.docker_api = DockerApi()
|
||||
|
||||
def __copy_build_resource_file_from_package__(self, build: DockerBuild):
|
||||
data = self.resource_api.read_resource("src/main/resources/docker/" + build.name)
|
||||
self.file_api.write_to_file(build.build_path() + '/' + build.name, data)
|
||||
|
||||
def __copy_build_resources_from_package__(self, build: DockerBuild):
|
||||
self.__copy_build_resource_file_from_package__(
|
||||
'image/resources/install_functions.sh')
|
||||
|
||||
def __copy_build_resources_from_dir__(self, build: DockerBuild):
|
||||
self.file_api.cp_force(build.docker_build_commons_path(), build.build_path())
|
||||
|
||||
def initialize_build_dir(self, build: DockerBuild):
|
||||
self.build_service.initialize_build_dir(build)
|
||||
self.file_api.clean_dir(build.build_path() + '/image/resources')
|
||||
if build.use_package_common_files:
|
||||
self.__copy_build_resources_from_package__(build)
|
||||
else:
|
||||
self.__copy_build_resources_from_dir__(build)
|
||||
self.file_api.cp_recursive('image', build.build_path())
|
||||
self.file_api.cp_recursive('test', build.build_path())
|
||||
|
||||
def image(self, build: DockerBuild):
|
||||
self.docker_api.image(build.name(), build.build_path())
|
||||
|
||||
def drun(self, build: DockerBuild):
|
||||
self.docker_api.drun(build.name())
|
||||
|
||||
def dockerhub_login(self, build: DockerBuild):
|
||||
self.docker_api.dockerhub_login(build.dockerhub_user, build.dockerhub_password)
|
||||
|
||||
def dockerhub_publish(self, build: DockerBuild):
|
||||
self.docker_api.dockerhub_publish(build.name(), build.dockerhub_user, build.docker_publish_tag)
|
||||
|
||||
def test(self, build: DockerBuild):
|
||||
self.docker_api.test(build.name(), build.build_path())
|
||||
|
||||
|
@ -0,0 +1,53 @@
|
||||
from pathlib import Path
|
||||
from sys import stdout
|
||||
from pkg_resources import resource_string
|
||||
from .python_util import execute
|
||||
|
||||
class ResourceApi():
|
||||
def read_resource(self, path: str) -> bytes:
|
||||
return resource_string(__name__, path)
|
||||
|
||||
class FileApi():
|
||||
def clean_dir(self, directory: str):
|
||||
execute('rm -rf ' + directory, shell=True)
|
||||
execute('mkdir -p ' + directory, shell=True)
|
||||
|
||||
def cp_force(self, src: str, target_dir: str):
|
||||
execute('cp -f ' + src + '* ' + target_dir, shell=True)
|
||||
|
||||
def cp_recursive(self, src: str, target_dir: str):
|
||||
execute('cp -r ' + src + ' ' + target_dir, shell=True)
|
||||
|
||||
def write_to_file(self, path: Path, data: bytes):
|
||||
with open(path, "w", encoding=stdout.encoding) as output_file:
|
||||
output_file.write(data.decode(stdout.encoding))
|
||||
|
||||
class DockerApi():
|
||||
def image(self, name: str, path: Path):
|
||||
execute('docker build -t ' + name +
|
||||
' --file ' + path + '/image/Dockerfile '
|
||||
+ path + '/image', shell=True)
|
||||
|
||||
def drun(self, name: str):
|
||||
execute('docker run -it --entrypoint="" ' +
|
||||
name + ' /bin/bash', shell=True)
|
||||
|
||||
def dockerhub_login(self, username: str, password: str):
|
||||
execute('docker login --username ' + username +
|
||||
' --password ' + password, shell=True)
|
||||
|
||||
def dockerhub_publish(self, name: str, username: str, tag=None):
|
||||
if tag is not None:
|
||||
execute('docker tag ' + name + ' ' + username +
|
||||
'/' + name + ':' + tag, shell=True)
|
||||
execute('docker push ' + username +
|
||||
'/' + name + ':' + tag, shell=True)
|
||||
execute('docker tag ' + name + ' ' + username +
|
||||
'/' + name + ':latest', shell=True)
|
||||
execute('docker push ' + username +
|
||||
'/' + name + ':latest', shell=True)
|
||||
|
||||
def test(self, name: str, path: Path):
|
||||
execute('docker build -t ' + name + '-test ' +
|
||||
'--file ' + path + '/test/Dockerfile '
|
||||
+ path + '/test', shell=True)
|
Loading…
Reference in New Issue