Я использую следующий скрипт оболочки для создания задания потока данных GCP. Этот скрипт затем вызывается из действий github для развертывания всякий раз, когда код передается мастеру. Проблема в том, что команда, которую я использую для создания задания потока данных, только выдает INFO
, что задание создается, и это все.
Одна из недавних фиксаций завершилась неудачно, поскольку у задания не было соответствующей корзины хранения, но в этом сценарии не было журналов или указаний на то, что рабочий процесс github не выполнен (т. Е. Задание не было создано)
set -x
#get job_name of existing running jobs
job_info=$(gcloud dataflow jobs list --status=active --filter="name:${TOPICNAME}-projectname-*")
job_id=$(echo $job_info|awk '{print $7}')
git_sha=$(git rev-parse --short HEAD)
python -m createpipeline --project_id ${GOOGLE_PROJECT_ID} --topic_name ${TOPICNAME} --job_name "${TOPICNAME}-projectname-${git_sha}"
#use the job_name of existing running job to drain it out
if [ ! -z "$job_id" ]; then
gcloud dataflow jobs drain ${job_id}
fi
В случае сбоя задания я получаю вывод такого рода из команды python -m
INFO:root:Creating dataflow pipeline for Topic: projects/projectname/topics/topicname Output Table: projectname:dataset.table
Но если задание выполнено успешно, базовая структура выводит много деталей. В конце этих подробностей (строк) он печатает
INFO:apache_beam.runners.dataflow.internal.apiclient:Create job: <Job
createTime: '2020-02-18T20:39:44.885028Z'
currentStateTime: '1970-01-01T00:00:00Z'
id: '2020-02-18_12_39_43-1111222233333334444'
location: '<gcp_region>'
name: 'job_name'
projectId: 'project_name'
stageStates: []
startTime: '2020-02-18T20:39:44.885028Z'
steps: []
tempFiles: []
type: TypeValueValuesEnum(JOB_TYPE_STREAMING, 2)>
Итак, вопросы
- Как можно извлечь
id
и job_name
из вышеприведенного вывода ( Либо все должно быть в порядке) - если имя задания или идентификатор не существует, я хотел бы завершить работу сценария оболочки, чтобы действия github знали, что это не удалось. в противном случае скрипт должен сообщить действиям github, что он прошел