Authored by qinchao

发布-通告镜像-

... ... @@ -30,6 +30,9 @@ public class Project {
//菜单:java重启 功能使用:获取需要重启的java项目
private boolean needRestartAfterSwitch;
//构造docker项目的时候,记录id
private int dockerProjectModelId;
public Project(){
}
... ...
... ... @@ -78,7 +78,9 @@ public class DockerBuildCtrl {
//model.addAttribute("releaseWorkJob_enviCount", releaseWorkJob_enviCount);
model.addAttribute("releaseWorkJob_environment", releaseWorkJob_environment);
model.addAttribute("releaseWorkJob_projectType", map.get("projectType")==null?"":(String)map.get("projectType"));
model.addAttribute("releaseWorkJob_projectDeployType", map.get("projectDeployType")==null?"":(String)map.get("projectDeployType"));
model.addAttribute("releaseWorkJob_branch", map.get("branch")==null?"":(String)map.get("branch"));
model.addAttribute("releaseWorkJob_imageFile", map.get("imageFile")==null?"":(String)map.get("imageFile"));
model.addAttribute("releaseWorkJob_project",releaseWorkJob_project);
model.addAttribute("releaseWorkJob_id", workJobId);
}
... ... @@ -86,13 +88,14 @@ public class DockerBuildCtrl {
model.addAttribute("clusters", JSON.toJSONString(this.getDockerClusterMap()));
model.addAttribute("environments", ProjectEnvironment.getDockerEnvironments(null));
model.addAttribute("projectTypes", ProjectEnvironment.getDockerProjectTypeMap());
model.addAttribute("projectDeployTypes", ProjectEnvironment.getProjectDeployTypeMap());
return new ModelAndView("project/docker_project");
}
@RequestMapping("/toBuildView")
public ModelAndView toBuildView(Model model,String project_id, String project_name,
String environment_name,String clusters_name,String clusters_text,
String operate_name, String branch_name, String rollbackImageStore,
String operate_name,String project_deploy_type, String branch_name,String image_file_name, String rollbackImageStore,
String workid_name, String buildIds,String failMsg, HttpSession session,String az2AutoSwitchOnlineCheck) {
List<Map<String,String>> buildInfoList=new ArrayList<>();
Map mapIds = new HashMap<>();
... ... @@ -133,6 +136,7 @@ public class DockerBuildCtrl {
model.addAttribute("clusters_text", clusters_text);
model.addAttribute("operate_name", operate_name);
model.addAttribute("branch_name", branch_name);
model.addAttribute("image_file_name", image_file_name);
model.addAttribute("workid_name", workid_name);
model.addAttribute("rollbackfile_name", rollbackImageStore);
model.addAttribute("buildIds", buildIds);
... ... @@ -211,6 +215,20 @@ public class DockerBuildCtrl {
}
}
@RequestMapping(value = "/getDeployImageList")
@ResponseBody
public String getDeployImageList(String projectId, String environment) {
try {
Map<String, String> map = new HashMap<>();
map.put("projectId", projectId);
map.put("environment", environment);
return httpRestClient.defaultGet("/dockerProject/getDeployImageList", String.class, map);
} catch (Exception ex) {
return "false";
}
}
@RequestMapping(value = "/getRollbackList")
@ResponseBody
public String getRollbackList(String projectId, String environment) {
... ... @@ -245,7 +263,7 @@ public class DockerBuildCtrl {
@RequestMapping(value = "/mirrorAndDeploy")
@ResponseBody
public BaseResponse mirrorAndDeploy(String project_id, String project_name,
String environment_name,String clusters_name, String operate_name, String branch_name,
String environment_name,String clusters_name, String operate_name,String project_deploy_type, String branch_name,String image_file_name,
String rollbackfile_name,String workid_name, Model model, HttpSession session) {
DockerJenkinsReq dockerJenkinsReq=new DockerJenkinsReq();
User user = (User) session.getAttribute("user");
... ...
... ... @@ -40,6 +40,9 @@ public class WorkSystemCtrl {
Logger log = LoggerFactory.getLogger(UserCtrl.class);
@Autowired
DockerBuildCtrl dockerBuildCtrl;
@Autowired
NodeBuildCtrl nodeBuildCtrl;
@Autowired
... ... @@ -134,6 +137,7 @@ public class WorkSystemCtrl {
for(DockerProjectModel model:models){
Project pro=new Project();
pro.setName(model.getProjectName());
pro.setDockerProjectModelId(model.getId());
ls.add(pro);
}
}
... ... @@ -143,6 +147,12 @@ public class WorkSystemCtrl {
}
@RequestMapping(value = "getDeployImageList")
@ResponseBody
public String getDeployImageList(String projectId, String environment) {
return dockerBuildCtrl.getDeployImageList(projectId,environment);
}
@RequestMapping(value = "getEnvByProject")
@ResponseBody
public List<String> getEnvByProject(String platform ,String projects) {
... ...
... ... @@ -20,10 +20,19 @@
<link rel="stylesheet" href="<%=basePath %>css/bootstrap.min.css"/>
<link href="<%=basePath%>css/style.default.css" rel="stylesheet">
<link href="<%=basePath%>css/morris.css" rel="stylesheet">
<link href="<%=basePath%>css/select2.css" rel="stylesheet"/>
<link rel="stylesheet" href="<%=basePath %>js/select2/dist/css/select2.css"/>
<script>
var contextPath = '<%=basePath %>';
</script>
<style>
.select2-selection.select2-selection--single {
min-height:40px;
}
.select2-container--default .select2-selection--single .select2-selection__rendered{
line-height:38px;
}
</style>
</head>
<body style="background-color: #444444;font-size: 14px">
... ... @@ -113,11 +122,25 @@
</div>
<div class="form-group" id="branch-div">
<label class="col-sm-1 control-label">Branch输入</label>
<div class="col-sm-8">
<input name="branch" type="text" class="form-control"
value="${releaseWorkJob_branch}"
style="width: 300px"/>
<label class="col-sm-1 control-label"><strong>发布方式:</strong></label>
<div class="col-sm-1" style="width: 110px;" >
<select id="projectDeployType" name="projectDeployType">
<c:forEach items="${projectDeployTypes }" var="projectDeployType" varStatus="projectDeloyTypeStatus">
<option value="${projectDeployType.key }">${projectDeployType.value }</option>
</c:forEach>
</select>
</div>
<div class="col-sm-7">
<div id="git_deploy_type_div" class="deploy_type_div_class">
<input name="branch" type="text" class="form-control"
value="${releaseWorkJob_branch}"
style="width: 300px"/>
</div>
<div id="image_deploy_type_div" class="deploy_type_div_class" style="display: none;width:600px;" >
<select id='imagesList' data-placeholder='Choose One' class="form-control">
<option value="${releaseWorkJob_imageFile}">${releaseWorkJob_imageFile}</option>
</select>
</div>
</div>
</div>
... ... @@ -192,9 +215,21 @@
<br>
<div class="input-group">
<span class="input-group-addon">发布方式</span>
<input type="hidden" name="project_deploy_type" >
<input type="text" name="project_deploy_type_name" class="form-control" readonly="readonly">
</div>
<br>
<div class="input-group" id="comfirm_deploy_content_div_git">
<span class="input-group-addon">分支名称</span>
<input type="text" name="branch_name" class="form-control" readonly="readonly">
</div>
<div class="input-group" id="comfirm_deploy_content_div_image">
<span class="input-group-addon">镜像文件</span>
<input type="text" name="image_file_name" class="form-control" readonly="readonly">
</div>
<br>
<div class="input-group">
... ... @@ -229,7 +264,7 @@
<script src="<%=basePath%>js/jquery-2.1.4.min.js"></script>
<script src="<%=basePath %>js/jquery-plugin/jquery.extend.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath%>js/bootstrap.min.js"></script>
<script src="<%=basePath%>js/select2.min.js"></script>
<script src="<%=basePath %>js/select2/dist/js/select2.full.js"></script>
<script src="<%=basePath%>js/custom.js"></script>
<script src="<%=basePath %>/js/unicorn.js"></script>
<script src="<%=basePath %>js/layer/v311/layer.js" type="text/javascript"></script>
... ... @@ -244,8 +279,71 @@
<script type="text/javascript">
var global_all_clusters=${clusters};
jQuery(document).ready(function () {
$("#projectDeployType").select2({
width:"110px"
});
$("#projectDeployType").on("change",function(){
var val = $(this).val();
deployTypeOnchange(val);
});
$('#imagesList').select2({
width:"100%"
});
if("${releaseWorkJob_id}".length>0){
$("#projectDeployType").prop("disabled", true);
$('#projectDeployType').val(['${releaseWorkJob_projectDeployType}']).trigger('change');
}
getProjects();
});
function deployTypeOnchange(val) {
$(".deploy_type_div_class").hide();
$("#"+val+"_deploy_type_div").show();
if(val=="image"){
$("#imagesList").select2("val", "");
$('#imagesList').select2().empty();
//加载项目的镜像
var dockerModelProjectId = $('input[name="project1"]:checked').val() ;
var list=[];
if(dockerModelProjectId){
$.ajax({
type: 'post',
url: contextPath + "dockerBuild/getDeployImageList",
data: {
projectId:dockerModelProjectId
},
dataType: 'json',
success: function (data) {
if(data){
$('#imagesList').select2({
width:"100%",
data: JSON.parse(data)
});
}
},
error: function (e) {
alert("从后台获取数据出错");
}
});
}else{
$('#imagesList').select2({
width:"100%",
data: list
});
}
}
}
function reloadDeployImage(){
if("${releaseWorkJob_id}".length>0){
return ;
}
deployTypeOnchange($("#projectDeployType").val());
}
/**
* 操作变更
... ... @@ -434,8 +532,8 @@
+' <label for="dockerGrayClusterId_'+key+'">'+global_all_clusters[key]+'</label>&nbsp;&nbsp;&nbsp;</div>';
}
$("#div_cluster_yoho-gray").html(htmlContent);
console.log(cluster_online);
console.log(cluster_gray);
reloadDeployImage();
}
function getRollbackList(){
... ... @@ -497,6 +595,7 @@
function comfirmSubmit() {
var operate = $("input[name='operate']:checked").val();
var environment = $("input[name='environments']:checked").val();
var projectDeployType = $("#projectDeployType").val();
//获取集群
var clustersName=new Array();
var clustersText=new Array();
... ... @@ -529,11 +628,31 @@
return;
}
$("#comfirm_deploy_content_div_git").hide();
$("#comfirm_deploy_content_div_image").hide();
var branch = $("input[name='branch']").val();
if (branch == "") {
alert("请填写分支名称");
var imageFile=$("#imagesList").val();
if(projectDeployType=="image"){
$("#comfirm_deploy_content_div_image").show();
branch="";
if (!imageFile) {
alert("请填写镜像文件");
return;
}
}else if(projectDeployType=="git"){
$("#comfirm_deploy_content_div_git").show();
if (!branch) {
alert("请填写分支名称");
return;
}
imageFile="";
}else{
alert("请填写发布方式");
return;
}
var workid = $("input[name='workid']").val();
if (workid == "") {
alert("请填写关联工单号");
... ... @@ -546,7 +665,10 @@
$("input[name='environment_name']").val(environment);
$("input[name='clusters_name']").val(clustersName);
$("input[name='clusters_text']").val(clustersText);
$("input[name='project_deploy_type']").val(projectDeployType);
$("input[name='project_deploy_type_name']").val($("#projectDeployType").find("option:selected").text());
$("input[name='branch_name']").val(branch);
$("input[name='image_file_name']").val(imageFile);
$("input[name='workid_name']").val(workid);
$('#confirmSubmitDivId').modal('show');
}else{
... ... @@ -672,7 +794,9 @@
param.project_id=$("input[name='project_id']").val();
param.project_name=$("input[name='project_name']").val();
param.environment_name=$("input[name='environment_name']").val();
param.project_deploy_type=$("input[name='project_deploy_type']").val();
param.branch_name=$("input[name='branch_name']").val();
param.image_file_name=$("input[name='image_file_name']").val();
param.workid_name=$("input[name='workid_name']").val();
param.clusters_name=$("input[name='clusters_name']").val();
param.clusters_text=$("input[name='clusters_text']").val();
... ...
... ... @@ -17,7 +17,6 @@
<link rel="stylesheet" href="<%=basePath %>css/bootstrap.min.css"/>
<link href="<%=basePath%>css/style.default.css" rel="stylesheet">
<link href="<%=basePath%>css/morris.css" rel="stylesheet">
<link rel="stylesheet" href="<%=basePath %>css/select2.css"/>
<link rel="stylesheet" href="<%=basePath %>js/select2/dist/css/select2.css"/>
<script>
var contextPath = '<%=basePath %>';
... ... @@ -128,7 +127,7 @@
<div class="form-group">
<label class="col-sm-1 control-label"><strong>发布方式:</strong></label>
<div class="col-sm-1" style="width: 110px;" >
<select id="projectDeployType" name="projectDeployType" onchange="deployTypeOnchange(this.value)">
<select id="projectDeployType" name="projectDeployType">
<c:forEach items="${projectDeployTypes }" var="projectDeployType" varStatus="projectDeloyTypeStatus">
<option value="${projectDeployType.key }">${projectDeployType.value }</option>
</c:forEach>
... ... @@ -233,7 +232,6 @@
<script src="<%=basePath%>js/jquery-2.1.4.min.js"></script>
<script src="<%=basePath%>js/bootstrap.min.js"></script>
<%--<script src="<%=basePath%>js/select2.min.js"></script>--%>
<script src="<%=basePath %>js/select2/dist/js/select2.full.js"></script>
<script src="<%=basePath%>js/custom.js"></script>
<script src="<%=basePath %>/js/unicorn.js"></script>
... ... @@ -258,6 +256,11 @@
width:"110px"
});
$("#projectDeployType").on("change",function(){
var val = $(this).val();
deployTypeOnchange(val);
});
$('#imagesList').select2();
//发布方式选择
... ... @@ -268,19 +271,43 @@
$("#imagesList").select2("val", "");
$('#imagesList').select2().empty();
//加载项目的镜像
var project = $("input[name='project']:checked").val();
var dockerProjectModelId = $("input[name='project']:checked").attr("dockerProjectModelId");
var list=[];
if(project){
list=["image1","image2"];
if(dockerProjectModelId){
$.ajax({
type: 'post',
url: contextPath + "workSystem/getDeployImageList",
data: {
projectId:dockerProjectModelId
},
dataType: 'json',
success: function (data) {
if(data){
$('#imagesList').select2({
width:"100%",
data: JSON.parse(data)
});
}
},
error: function (e) {
alert("从后台获取数据出错");
}
});
}else{
$('#imagesList').select2({
width:"80%",
data: list
});
}
$('#imagesList').select2({
width:"80%",
data: list
});
}
}
function reloadDeployImage(){
deployTypeOnchange($("#projectDeployType").val());
}
function toAddReleaseWork() {
$.ajax({
url: contextPath + 'workSystem/checkRole?type=release',
... ... @@ -422,6 +449,11 @@
}
//node 去掉3个项目
var dockerProjectModelId="";
if("DOCKER" == platform){
dockerProjectModelId=data[i].dockerProjectModelId;
}
if("NODE" == platform){
if(data[i].name == "YOHOBUY-WAP-NODE" || data[i].name == "YOHOBUY-PC-NODE" || data[i].name == "YOHOBLK-WAP"){
continue;
... ... @@ -431,6 +463,8 @@
project_HTML += "<div class='"+checkTypeCss+"' style='display: inline'>";
project_HTML += " <input name='project' type='"+checkType+"' id='" + data[i].name + "' value='" + data[i].name +"' ";
project_HTML += " dockerProjectModelId = '"+dockerProjectModelId+"' ";
project_HTML += " onclick = loadEnv('"+data[i].name+"') ";
project_HTML += "/>";
... ... @@ -451,6 +485,8 @@
//加载环境
function loadEnv(projName){
reloadDeployImage();
var platform = $('input:radio[name=platform]:checked').val();
var projects = "";
$('input[name="project"]:checked').each(function () {
... ...