docker
This commit is contained in:
parent
880c4cd49e
commit
e8a780dd9b
@ -81,7 +81,25 @@ class BaseTester:
|
|||||||
self.solution.result = CONSTS["testing_status"] + f"({num})"
|
self.solution.result = CONSTS["testing_status"] + f"({num})"
|
||||||
self.solution.save()
|
self.solution.save()
|
||||||
|
|
||||||
|
def _setup_networking(self):
|
||||||
|
self.dockerfiles = sorted(
|
||||||
|
list(ExtraFile.objects.filter(filename__startswith="Dockerfile_", readable=True, task=self.solution.task)),
|
||||||
|
key=lambda x: x.filename)
|
||||||
|
self.call(f"docker network create solution_network_{self.solution.id}")
|
||||||
|
for file in self.dockerfiles:
|
||||||
|
add_name = file.filename[11:]
|
||||||
|
with open(join(self.path, 'Dockerfile'), 'w') as fs:
|
||||||
|
fs.write(file.text)
|
||||||
|
self.call(f"docker build -t solution_image_{self.solution.id}_{add_name} .")
|
||||||
|
self.call(f"docker run "
|
||||||
|
f"--host {add_name} "
|
||||||
|
f"--network solution_network_{self.solution.id} "
|
||||||
|
f"--name solution_container_{self.solution.id}_{add_name} "
|
||||||
|
f"-t -d solution_image_{self.solution.id}_{add_name}")
|
||||||
|
|
||||||
def execute(self):
|
def execute(self):
|
||||||
|
self.solution.result = CONSTS["testing_status"]
|
||||||
|
self.solution.save()
|
||||||
if not exists("solutions"):
|
if not exists("solutions"):
|
||||||
mkdir("solutions")
|
mkdir("solutions")
|
||||||
mkdir(self.path)
|
mkdir(self.path)
|
||||||
@ -97,15 +115,7 @@ class BaseTester:
|
|||||||
join(self.path, file.path), "wb"
|
join(self.path, file.path), "wb"
|
||||||
) as fs:
|
) as fs:
|
||||||
fs.write(get_bytes(file.fs_id).replace(b"\r\n", b"\n"))
|
fs.write(get_bytes(file.fs_id).replace(b"\r\n", b"\n"))
|
||||||
dockerfiles = sorted(list(ExtraFile.objects.filter(filename__startswith="Dockerfile", readable=True, task=self.solution.task)), key=lambda x: x.filename)
|
self._setup_networking()
|
||||||
self.call(f"docker network create solution_network_{self.solution.id}")
|
|
||||||
for file in dockerfiles:
|
|
||||||
with open(join(self.path, 'Dockerfile'), 'w') as fs:
|
|
||||||
fs.write(file.text)
|
|
||||||
self.call(f"docker build -t solution_image_{self.solution.id}_{file.filename} .".lower())
|
|
||||||
self.call(f"docker run --network solution_network_{self.solution.id} --name solution_container_{self.solution.id}_{file.filename} -t -d solution_image_{self.solution.id}_{file.filename}".lower())
|
|
||||||
self.solution.result = CONSTS["testing_status"]
|
|
||||||
self.solution.save()
|
|
||||||
docker_command = f"docker run --network solution_network_{self.solution.id} --name solution_{self.solution.id} --volume=/sprint-data/solutions/{self.solution.id}:/{self.working_directory} -t -d {self.solution.language.image}"
|
docker_command = f"docker run --network solution_network_{self.solution.id} --name solution_{self.solution.id} --volume=/sprint-data/solutions/{self.solution.id}:/{self.working_directory} -t -d {self.solution.language.image}"
|
||||||
print(docker_command)
|
print(docker_command)
|
||||||
call(docker_command, shell=True)
|
call(docker_command, shell=True)
|
||||||
@ -162,9 +172,10 @@ class BaseTester:
|
|||||||
self.solution.save()
|
self.solution.save()
|
||||||
self.call(f"docker rm --force solution_{self.solution.id}")
|
self.call(f"docker rm --force solution_{self.solution.id}")
|
||||||
self.call(f"docker rm --force solution_{self.solution.id}_checker")
|
self.call(f"docker rm --force solution_{self.solution.id}_checker")
|
||||||
for file in dockerfiles:
|
for file in self.dockerfiles:
|
||||||
self.call(f"docker rm --force solution_container_{self.solution.id}_{file.filename}".lower())
|
add_name = file.filename[11:]
|
||||||
self.call(f"docker image rm solution_image_{self.solution.id}_{file.filename}".lower())
|
self.call(f"docker rm --force solution_container_{self.solution.id}_{add_name}")
|
||||||
|
self.call(f"docker image rm solution_image_{self.solution.id}_{add_name}")
|
||||||
self.solution.user.userinfo.refresh_from_db()
|
self.solution.user.userinfo.refresh_from_db()
|
||||||
notify(
|
notify(
|
||||||
self.solution.user,
|
self.solution.user,
|
||||||
|
Loading…
Reference in New Issue
Block a user