update low and add jenkins api
This commit is contained in:
@@ -169,6 +169,32 @@ def _collect_autonomous_for_save(phases: list, ver: int) -> tuple[list | None, s
|
||||
return out, None
|
||||
|
||||
|
||||
def _phase_for_jenkins_trigger(ph: dict, ver: int) -> tuple[dict | None, str | None]:
|
||||
"""Тело для POST /jenkins/trigger из текущих виджетов фазы."""
|
||||
pid = ph["id"]
|
||||
j = ph.get("jenkins") or {}
|
||||
default_pj = json.dumps(j.get("parameters", {}), ensure_ascii=False, indent=2)
|
||||
raw = st.session_state.get(f"ap_pj_{pid}_{ver}", default_pj)
|
||||
try:
|
||||
params_obj = json.loads(raw) if str(raw).strip() else {}
|
||||
if not isinstance(params_obj, dict):
|
||||
raise TypeError("нужен JSON-объект")
|
||||
except Exception as e:
|
||||
return None, f"Параметры Jenkins: {e}"
|
||||
job = st.session_state.get(f"ap_jj_{pid}_{ver}", j.get("job", "")).strip()
|
||||
if not job:
|
||||
return None, "Укажите Job / путь."
|
||||
surl = st.session_state.get(f"ap_js_{pid}_{ver}", j.get("server_url", "")).strip()
|
||||
return (
|
||||
{
|
||||
"server_url": surl,
|
||||
"job": job,
|
||||
"parameters": {str(k): str(v) for k, v in params_obj.items()},
|
||||
},
|
||||
None,
|
||||
)
|
||||
|
||||
|
||||
def _show_account():
|
||||
_title_bar(show_logout=bool(st.session_state.token))
|
||||
st.caption("Войдите или создайте учётную запись, чтобы открыть разделы портала.")
|
||||
@@ -444,6 +470,33 @@ with tab_autonomous:
|
||||
st.session_state.autonomous_phases = [p for p in phases if p["id"] != pid]
|
||||
st.session_state.autonomous_pl_version = ver + 1
|
||||
st.rerun()
|
||||
if st.button(
|
||||
"Запустить Jenkins (build / buildWithParameters)",
|
||||
key=f"ap_run_{pid}_{ver}",
|
||||
use_container_width=True,
|
||||
):
|
||||
pj, jerr = _phase_for_jenkins_trigger(ph, ver)
|
||||
if jerr:
|
||||
st.error(jerr)
|
||||
else:
|
||||
with st.spinner("Запрос к Jenkins API…"):
|
||||
try:
|
||||
jr = requests.post(
|
||||
f"{backend_base_url}/jenkins/trigger",
|
||||
json=pj,
|
||||
headers=_auth_headers(),
|
||||
timeout=120,
|
||||
)
|
||||
if jr.status_code >= 400:
|
||||
st.error(_detail_or_text(jr))
|
||||
else:
|
||||
info = jr.json()
|
||||
loc = info.get("location") or ""
|
||||
st.success(
|
||||
f"Сборка поставлена в очередь. {('Queue: ' + loc) if loc else ''}"
|
||||
)
|
||||
except Exception as ex:
|
||||
st.error(str(ex))
|
||||
|
||||
save_col1, save_col2 = st.columns([1, 2])
|
||||
with save_col1:
|
||||
@@ -469,14 +522,18 @@ with tab_autonomous:
|
||||
data = r.json()
|
||||
st.session_state.autonomous_pl_title = data.get("title", "")
|
||||
st.session_state.autonomous_phases = data.get("phases", [])
|
||||
st.session_state.ap_global_title = data.get("title", "")
|
||||
if "ap_global_title" in st.session_state:
|
||||
del st.session_state["ap_global_title"]
|
||||
st.session_state.autonomous_pl_version = ver + 1
|
||||
st.success("Сохранено.")
|
||||
st.rerun()
|
||||
except Exception as e:
|
||||
st.error(str(e))
|
||||
with save_col2:
|
||||
st.caption("Сохранение: `PUT /pipelines/autonomous` → таблица `autonomous_pipelines` (Postgres).")
|
||||
st.caption(
|
||||
"Сохранение: `PUT /pipelines/autonomous`. Запуск: `POST /jenkins/trigger` "
|
||||
"(учётные данные Jenkins — только в env backend: `JENKINS_USER`, `JENKINS_TOKEN`)."
|
||||
)
|
||||
|
||||
with st.expander("Экспорт YAML (черновик)", expanded=False):
|
||||
snap, err = _collect_autonomous_for_save(phases, ver)
|
||||
|
||||
Reference in New Issue
Block a user