update low and add jenkins api

This commit is contained in:
2026-04-10 01:32:57 +03:00
parent 2d30fe258b
commit ccbbf64ddb
4 changed files with 217 additions and 2 deletions

View File

@@ -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)