Source code for changes.jobs.sync_artifact
from flask import current_app
from changes.backends.base import UnrecoverableException
from changes.constants import Result
from changes.models.artifact import Artifact
from changes.models.jobplan import JobPlan
from changes.queue.task import tracked_task
@tracked_task
[docs]def sync_artifact(artifact_id=None, **kwargs):
"""
Downloads an artifact from jenkins.
"""
artifact = Artifact.query.get(artifact_id)
if artifact is None:
return
step = artifact.step
if step.result == Result.aborted:
return
_, implementation = JobPlan.get_build_step_for_job(job_id=step.job_id)
# TODO(dcramer): we eventually want to abstract the entirety of Jenkins
# artifact syncing so that we pull files and then process them
if artifact.file:
try:
implementation.get_artifact_manager(step).process(artifact)
except UnrecoverableException:
current_app.logger.exception(
'Unrecoverable exception processing artifact %s: %s',
artifact.step_id, artifact)
else:
try:
implementation.fetch_artifact(artifact=artifact)
except UnrecoverableException:
current_app.logger.exception(
'Unrecoverable exception fetching artifact %s: %s',
artifact.step_id, artifact)