From a311c88903239dbcb2dd64ad78031d442008f0dc Mon Sep 17 00:00:00 2001 From: dingguodong Date: Mon, 26 Jul 2021 14:44:22 +0800 Subject: [PATCH] * Run gitlab pipeline. --- module/compile/lang/zh-cn.php | 2 ++ module/gitlabpipeline/control.php | 43 ++++++++++++++++++++-------- module/gitlabpipeline/lang/zh-cn.php | 1 + module/gitlabpipeline/model.php | 2 +- 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/module/compile/lang/zh-cn.php b/module/compile/lang/zh-cn.php index 7f9395de3c..702cee9896 100644 --- a/module/compile/lang/zh-cn.php +++ b/module/compile/lang/zh-cn.php @@ -13,6 +13,8 @@ $lang->compile->result = '构建结果'; $lang->compile->statusList['success'] = '成功'; $lang->compile->statusList['failure'] = '失败'; $lang->compile->statusList['created'] = '新建'; +$lang->compile->statusList['pending'] = '队列中'; +$lang->compile->statusList['running'] = '运行中'; $lang->compile->statusList['building'] = '构建中'; $lang->compile->statusList['create_fail'] = '创建失败'; $lang->compile->statusList['timeout'] = '执行超时'; diff --git a/module/gitlabpipeline/control.php b/module/gitlabpipeline/control.php index 85851e2b22..c0e55f7f30 100644 --- a/module/gitlabpipeline/control.php +++ b/module/gitlabpipeline/control.php @@ -15,24 +15,43 @@ class gitlabpipeline extends control * * @param int $jobID * @access public - * @return int|false + * @return string|false */ public function runPipeline($jobID) { - $job = $this->loadModel('job')->getByID($jobID); - $pipeline = $this->gitlabpipeline->apiCreatePipeline($job->server, $job->pipeline, array('ref' => 'master')); - - if(isset($pipeline->id)) + $now = helper::now(); + $job = $this->loadModel('job')->getByID($jobID); + $status = $job->lastStatus; + if($status and $status != 'success' and $status != 'create_fail') { - a($pipeline); // todo(dingguodong) save $pipeline->id to zt_compile, zt_job. - echo js::alert(sprintf($this->lang->gitlabpipeline->sendExec, $pipeline->status)); + $compile = $this->loadModel('compile')->getLastResult($jobID); + if($compile) + { + $pipeline = $this->gitlabpipeline->apiGetPiplineByID($job->server, $job->pipeline, $compile->queue); + $this->dao->update(TABLE_COMPILE)->set('status')->eq($pipeline->status)->set('updateDate')->eq($now)->where('id')->eq($compile->id)->exec(); + $this->dao->update(TABLE_JOB)->set('lastExec')->eq($now)->set('lastStatus')->eq($pipeline->status)->where('id')->eq($jobID)->exec(); + } + echo js::alert($this->lang->gitlabpipeline->execError); die(js::reload('parent')); } - else - { - return false; - } - } + $pipeline = $this->gitlabpipeline->apiCreatePipeline($job->server, $job->pipeline, array('ref' => 'master')); + $status = isset($pipeline->id) ? 'created' : 'create_fail'; + + $this->dao->update(TABLE_JOB)->set('lastExec')->eq($now)->set('lastStatus')->eq($status)->where('id')->eq($jobID)->exec(); + + if(!isset($pipeline->id)) return false; + $build = new stdclass; + $build->job = $jobID; + $build->name = $job->name; + $build->queue = $pipeline->id; // use `queue` to save gitlab project pipeline id. + $build->status = $pipeline->status; + $build->createdBy = $this->app->user->account; + $build->createdDate = $now; + $this->dao->insert(TABLE_COMPILE)->data($build)->exec(); + + echo js::alert(sprintf($this->lang->gitlabpipeline->sendExec, $pipeline->status)); + die(js::reload('parent')); + } } diff --git a/module/gitlabpipeline/lang/zh-cn.php b/module/gitlabpipeline/lang/zh-cn.php index af819b3e9c..cd6122c0f1 100644 --- a/module/gitlabpipeline/lang/zh-cn.php +++ b/module/gitlabpipeline/lang/zh-cn.php @@ -1,3 +1,4 @@ gitlabpipeline->runPipeline = '运行流水线'; // run pipeline manually $lang->gitlabpipeline->sendExec = '流水线已运行!当前状态为:%s'; +$lang->gitlabpipeline->execError = '不要重复运行流水线,请等待运行结果!'; diff --git a/module/gitlabpipeline/model.php b/module/gitlabpipeline/model.php index 536c5bd642..8d77f5eae5 100644 --- a/module/gitlabpipeline/model.php +++ b/module/gitlabpipeline/model.php @@ -24,7 +24,7 @@ class gitlabpipelineModel extends model public function apiGetPiplineByID($gitlabID, $projectID, $pipelineID) { - $url = sprintf($this->loadModel('gitlab')->getApiRoot($gitlabID), "/projects/{$projectID}/pipelines/{$piplinesID}"); + $url = sprintf($this->loadModel('gitlab')->getApiRoot($gitlabID), "/projects/{$projectID}/pipelines/{$pipelineID}"); return json_decode(commonModel::http($url)); }