SEO技术

SEO技术

Products

当前位置:首页 > SEO技术 >

如何获取南宁网警提供的免费手机自助建站服务?

96SEO 2026-02-19 10:35 0


2.428

公司自研CI/DI平台借助JenkinsSonarQube进行代码质量管理。

如何获取南宁网警提供的免费手机自助建站服务?

对接版本

Jenkins版本为Version

Java对接Jenkins有第三方组件比如jenkins-rest、jenkins-client但是考虑到第三方组件会引入其他jar包而且会存在漏洞问题。

到时候升级组件时可能会和项目框架本身使用的第三方jar起冲突。

因此使用jenkins-cli来实现自己的需求。

注意这里不是单纯的使用java

-jar

而且提取并修改jenkins-cli.jar中的源码来达到自身需求开发的目的。

比如创建View时使用jenkins-cli.jar时需要传入xml内容标准输入流

所以我们进行了改造可以支持传入byte数组的形式使用体验更符合大众。

jenkins-cli.jar的源码修改

package

com.infosec.autobuild.util;import

com.cdancy.jenkins.rest.JenkinsClient;

import

com.cdancy.jenkins.rest.domain.job.BuildInfo;

import

com.cdancy.jenkins.rest.domain.queue.QueueItem;

import

com.infosec.autobuild.dto.jenkins.BuildInfoDto;

import

com.infosec.autobuild.dto.jenkins.CredentialDto;

import

com.infosec.autobuild.dto.jenkins.JobDto;

import

com.infosec.autobuild.dto.jenkins.ViewDto;

import

com.infosec.autobuild.hudson.cli.CLI;

import

org.apache.http.auth.AuthScope;

import

org.apache.http.auth.UsernamePasswordCredentials;

import

org.apache.http.client.AuthCache;

import

org.apache.http.client.CredentialsProvider;

import

org.apache.http.client.methods.CloseableHttpResponse;

import

org.apache.http.client.methods.HttpGet;

import

org.apache.http.client.protocol.HttpClientContext;

import

org.apache.http.impl.auth.BasicScheme;

import

org.apache.http.impl.client.BasicAuthCache;

import

org.apache.http.impl.client.BasicCredentialsProvider;

import

org.apache.http.impl.client.CloseableHttpClient;

import

org.apache.http.impl.client.HttpClients;

import

org.apache.http.util.EntityUtils;

import

org.springframework.beans.BeanUtils;

import

org.springframework.util.CollectionUtils;

import

org.springframework.util.ObjectUtils;

import

org.springframework.util.StringUtils;import

java.net.URI;

java.nio.charset.StandardCharsets;

import

system::system::jenkins等同于SystemCredentialsProvider::SystemContextResolver::jenkins*

-jar

list-credentials-context-resolvers获取*/private

static

Credentials集合:list-credentials*/LIST_CREDENTIALS(list-credentials,

查询Jenkins

Credentials集合返回xml:list-credentials-as-xml*/LIST_CREDENTIALS_AS_XML(list-credentials-as-xml,

查询Jenkins

Credentials:create-credentials-by-xml*/CREATE_CREDENTIALS(create-credentials-by-xml,

创建Jenkins

Credentials:create-credentials-by-xml*/UPDATE_CREDENTIALS(update-credentials-by-xml,

更新Jenkins

Credentials:delete-credentials*/DELETE_CREDENTIALS(delete-credentials,

删除Jenkins

Credentials:get-credentials-as-xml*/GET_CREDENTIALS(get-credentials-as-xml,

查询Jenkins

Credentials),;SetterGetterprivate

String

{this.setOp(op);this.setDesc(desc);}}/***

创建Jenkins

Jenkins地址比如http://10.100.57.156:8080*

param

(!StringUtils.hasText(credentialDto.getId()))

{credentialDto.setId(UUID.randomUUID().toString());}String

xml

CredentialDto.parseDto2Xml(credentialDto);CLI

cli

String[]{Operation.CREATE_CREDENTIALS.op,

SYSTEM_STORE_ID,

ResultDto.SUCCESS.equals(String.valueOf(code))

ResultDto.buildErrorDto().msg(msg);}/***

删除Jenkins

Jenkins地址比如http://10.100.57.156:8080*

param

String[]{Operation.DELETE_CREDENTIALS.op,

SYSTEM_STORE_ID,

msg.contains(CREDENTIAL_NOT_FOUND))

{return

ResultDto.buildSuccessDto();}return

ResultDto.SUCCESS.equals(String.valueOf(code))

ResultDto.buildErrorDto().msg(msg);}/***

更新Jenkins

Jenkins地址比如http://10.100.57.156:8080*

param

(!StringUtils.hasText(credentialDto.getId()))

{return

ResultDto.buildErrorDto().msg(凭证id不能为空);}String

xml

CredentialDto.parseDto2Xml(credentialDto);CLI

cli

String[]{Operation.UPDATE_CREDENTIALS.op,

PROTOCOL_HTTP,

msg.contains(CREDENTIAL_NOT_FOUND))

{msg

ResultDto.buildErrorDto().msg(msg);}return

ResultDto.SUCCESS.equals(String.valueOf(code))

ResultDto.buildErrorDto().msg(msg);}/***

查询Jenkins

Jenkins地址比如http://10.100.57.156:8080*

param

String[]{Operation.GET_CREDENTIALS.op,

SYSTEM_STORE_ID,

msg.contains(CREDENTIAL_NOT_FOUND))

{msg

ResultDto.buildErrorDto().msg(msg);}boolean

ifSuccess

ResultDto.SUCCESS.equals(String.valueOf(code));CredentialDto

credentialDto

{CredentialDto.parseXmlStr2Dto(credentialDto,

msg,

ResultDto.buildSuccess(credentialDto)

ResultDto.buildError(credentialDto).msg(msg);}/***

param

Jenkins地址比如http://10.100.57.156:8080*

param

String[]{Operation.LIST_CREDENTIALS_AS_XML.op,

SYSTEM_STORE_ID},PROTOCOL_HTTP,

null);int

ResultDto.SUCCESS.equals(String.valueOf(code));if

(ifSuccess)

{CredentialDto.parseXmlStr2List(credentialDtoList,

msg);}return

ResultDto.buildSuccess(credentialDtoList)

ResultDto.buildError(credentialDtoList).msg(msg);}/***

param

host/job/jobName/buildId/api/json;private

static

host/job/jobName/buildId/api/json;enum

Operation

Job添加到视图中*/ADD_TO_VIEW(add-job-to-view,

将Jenkins

Job从视图中移除*/REMOVE_FROM_VIEW(remove-job-from-view,

将Jenkins

{this.setOp(op);this.setDesc(desc);}}/***

param

Jenkins地址比如http://10.100.57.156:8080*

param

String[]{Operation.LIST.op};String[]

finalArgs

Stream.concat(Arrays.stream(baseArgs),Arrays.stream(new

String[]{viewName})).toArray(String[]::new)

baseArgs;CLI

ResultDto.SUCCESS.equals(String.valueOf(code));boolean

listAllJobs

JobDto();jobDto.setJobName(tmp);jobDto.setViewName(listAllJobs

viewName

);jobDtoList.add(jobDto);}}}return

ifSuccess

ResultDto.buildSuccess(jobDtoList)

ResultDto.buildError(jobDtoList).msg(msg);}/***

param

String[]{Operation.ADD_TO_VIEW.op};String[]

finalArgs

jobNames).flatMap(Arrays::stream).toArray(String[]::new);CLI

cli

ResultDto.SUCCESS.equals(String.valueOf(code))

?ResultDto.buildSuccess(jobDtoList)

ResultDto.buildError(jobDtoList).msg(msg);}public

static

String[]{Operation.REMOVE_FROM_VIEW.op};String[]

finalArgs

jobNames).flatMap(Arrays::stream).toArray(String[]::new);CLI

cli

ResultDto.SUCCESS.equals(String.valueOf(code))

?ResultDto.buildSuccess(jobDtoList)

ResultDto.buildError(jobDtoList).msg(msg);}/***

创建Job**

Jenkins地址比如http://10.100.57.156:8080*

param

job.getSvnInfoList();ListJobDto.GitInfoDto

gitInfoDtoList

CollectionUtils.isEmpty(svnInfoDtoList)

CollectionUtils.isEmpty(gitInfoDtoList);if

(scmCheck)

ResultDto.buildErrorDto().msg(源码管理地址信息不能为空);}String

xml

keepDependenciesfalse/keepDependencies\n

properties/\n;if

(!CollectionUtils.isEmpty(svnInfoDtoList))

{xml

(!CollectionUtils.isEmpty(gitInfoDtoList))

{xml

excludedRegions/excludedRegions\n

includedRegions/includedRegions\n

excludedRevprop/excludedRevprop\n

excludedCommitMessages/excludedCommitMessages\n

workspaceUpdater

class\hudson.scm.subversion.UpdateUpdater\/\n

ignoreDirPropChangesfalse/ignoreDirPropChanges\n

filterChangelogfalse/filterChangelog\n

quietOperationtrue/quietOperation\n

/scm\n

blockBuildWhenDownstreamBuildingfalse/blockBuildWhenDownstreamBuilding\n

blockBuildWhenUpstreamBuildingfalse/blockBuildWhenUpstreamBuilding\n

triggers/\n

concurrentBuildfalse/concurrentBuild\n;xml

publishers/\n

ResultDto.SUCCESS.equals(String.valueOf(code))

ResultDto.buildErrorDto().msg(msg);}/***

更新Job**

Jenkins地址比如http://10.100.57.156:8080*

param

Jenkins地址比如http://10.100.57.156:8080*

param

jobNames).flatMap(Arrays::stream).toArray(String[]::new);return

operation(host,

Jenkins地址比如http://10.100.57.156:8080*

param

Jenkins地址比如http://10.100.57.156:8080*

param

JobDto();jobDto.setJobName(jobName);//解析xml获取名称、描述等信息String

msg

ObjectUtils.isEmpty(resultDto.getData())

resultDto.getData().toString();if

{jobDto.parseXmlStr2Dto(msg);}return

构建单个Job**

Jenkins地址比如http://10.100.57.156:8080*

param

Jenkins地址比如http://10.100.57.156:8080*

param

String[]{buildId.toString()}).flatMap(Arrays::stream).toArray(String[]::new);return

operation(host,

Jenkins地址比如http://10.100.57.156:8080*

param

Jenkins地址比如http://10.100.57.156:8080*

param

Jenkins地址比如http://10.100.57.156:8080*

param

Jenkins地址比如http://10.100.57.156:8080*

param

String[]{Operation.STOP_BUILDS.op},

jobNames).flatMap(Arrays::stream).toArray(String[]::new);return

operation(host,

Jenkins地址比如http://10.100.57.156:8080*

param

ResultDto.buildErrorDto().msg(buildId

can

JenkinsClient.builder().endPoint(host).credentials(username

password).build();ListQueueItem

list

client.api().queueApi().queue();for

(QueueItem

item.task().name());}System.out.println(JsonUtil.toJSONString(client.api().systemApi().systemInfo()));BuildInfo

data

client.api().jobsApi().buildInfo(null,

jobName,

buildId);System.out.println(data.building());String

url

JOB_BUILD_DETAIL_URL.replace(host,

doGet(url,

Jenkins地址比如http://10.100.57.156:8080*

param

IllegalArgumentException(buildId

can

JOB_BUILD_DETAIL_URL.replace(host,

buildId.toString());BuildInfoDto

infoDto

Jenkins地址比如http://10.100.57.156:8080*

param

ResultDto.SUCCESS.equals(String.valueOf(code))

ResultDto.buildError(msg).msg(msg);}/***

xml章节内容**

class\hudson.scm.SubversionSCM\

new

hudson.scm.SubversionSCM_-ModuleLocation\n).append(

remote

svnInfoDto.getIgnoreExternalsOption()

/ignoreExternalsOption\n).append(

svnInfoDto.getCancelProcessOnExternalsFail()

/cancelProcessOnExternalsFail\n).append(

/hudson.scm.SubversionSCM_-ModuleLocation\n);}xml

sb.toString();return

job.getBuildCmdList();ListJobDto.SonarRunnerBuilderDto

job.getSonarRunnerBuilderDtoList();boolean

checkBuilders

CollectionUtils.isEmpty(shellList)

CollectionUtils.isEmpty(sonarRunnerBuilderDtoList);if

(checkBuilders)

(!CollectionUtils.isEmpty(shellList))

{String

shellList.stream().collect(Collectors.joining(\n));xml

hudson.tasks.Shell\n

(!CollectionUtils.isEmpty(sonarRunnerBuilderDtoList))

{JobDto.ProjectInfo

projectInfo.getBuildVersion();StringBuilder

new

hudson.plugins.sonar.SonarRunnerBuilder\n).append(

keyInfo

\n).append(sonar.projectVersion

sonar.getSonarScannerLanguage()

\n).append(sonar.sourceEncodingUTF-8\n).append(sonar.java.binariestarget/classes\n).append(sonar.sources.\n).append(sonar.login

job.getSonarLogin()

sonar.getSonarScmDisabled()).append(

javaOpts

/additionalArguments\n).append(

jdk

/hudson.plugins.sonar.SonarRunnerBuilder\n);}xml

sb.toString();}xml

创建Jenkins视图*/CREATE(create-view,

创建Jenkins视图),/***

更新Jenkins视图*/UPDATE(update-view,

更新Jenkins视图),/***

删除Jenkins视图*/DELETE(delete-view,

删除Jenkins视图),/***

查询Jenkins视图);SetterGetterprivate

String

{this.setOp(op);this.setDesc(desc);}}/***

创建View**

Jenkins地址比如http://10.100.57.156:8080*

param

Jenkins地址比如http://10.100.57.156:8080*

param

Jenkins地址比如http://10.100.57.156:8080*

param

Jenkins地址比如http://10.100.57.156:8080*

param

Jenkins地址比如http://10.100.57.156:8080*

param

Jenkins地址比如http://10.100.57.156:8080*

param

(!StringUtils.hasText(viewName))

{return

ResultDto.buildErrorDto().msg(视图名称不能为空);}CLI

cli

ResultDto.SUCCESS.equals(String.valueOf(code));ViewDto

viewDto

ViewDto();viewDto.setViewName(viewName);//解析xml获取view名称、描述、关联的job等信息if

{viewDto.parseXmlStr2Dto(msg);}if

(ObjectUtils.isEmpty(returnJobDetails))

{returnJobDetails

jobName).getData();BeanUtils.copyProperties(dto,

jobDto);}}return

ResultDto.buildSuccess(viewDto)

ResultDto.buildError(viewDto).msg(msg);}/***

拷贝或重命名View**

Jenkins地址比如http://10.100.57.156:8080*

param

(!oldViewInfoResult.ifSuccess())

{return

oldViewInfoResult.getData();BeanUtils.copyProperties(oldViewInfo,

newViewInfo);newViewInfo.setViewName(newViewName);//2、拷贝目标View内容并重命名ResultDto

createResult

(CollectionUtils.isEmpty(jobDtoList))

{return

jobDtoList.get(i).getJobName();}ResultDto

addJob2ViewResult

(!addJob2ViewResult.ifSuccess())

{return

ResultDto.buildSuccessDto();}}/***

param

Jenkins地址比如http://10.100.57.156:8080*

param

操作create-view、update-view、delete-view*

return

class\hudson.model.View$PropertyList\/\n

jobNames\n

class\java.lang.String$CaseInsensitiveComparator\/\n

/jobNames\n

hudson.views.LastSuccessColumn/\n

hudson.views.LastFailureColumn/\n

hudson.views.LastStableColumn/\n

hudson.views.LastDurationColumn/\n

hudson.views.BuildButtonColumn/\n

jenkins.branch.DescriptionColumn

/\n

(StringUtils.hasText(viewDto.getIncludeRegex()))

{xml

Operation.UPDATE.equals(op);String[]

finalArgs

ResultDto.SUCCESS.equals(String.valueOf(code))

ResultDto.buildErrorDto().msg(msg);}}public

static

获取Jenkins版本信息*/VERSION(version,

获取Jenkins版本信息),/***

更新Jenkins全局配置信息*/RELOAD_CONFIGURATION(reload-configuration,

重启Jenkins服务),/***

builds.*/SAFE_RESTART(safe-restart,

重启Jenkins服务),/***

停止Jenkins服务*/SHUTDOWN(shutdown,

停止Jenkins服务),/***

Jenkins.*/SAFE_SHUTDOWN(safe-shutdown,

安全停止Jenkins服务),/***

queue.*/CLEAR_QUEUE(clear-queue,

清除Jenkins中的构建队列),;SetterGetterprivate

String

{this.setOp(op);this.setDesc(desc);}}/***

param

Jenkins地址比如http://10.100.57.156:8080*

param

Jenkins地址比如http://10.100.57.156:8080*

param

Jenkins地址比如http://10.100.57.156:8080*

param

Jenkins地址比如http://10.100.57.156:8080*

param

Jenkins地址比如http://10.100.57.156:8080*

param

Jenkins地址比如http://10.100.57.156:8080*

param

Jenkins地址比如http://10.100.57.156:8080*

param

Jenkins地址比如http://10.100.57.156:8080*

param

Operation.RELOAD_CONFIGURATION);}/***

基本操作**

Jenkins地址比如http://10.100.57.156:8080*

param

ResultDto.SUCCESS.equals(String.valueOf(code))

?ResultDto.buildSuccessDto(successMsg)

ResultDto.buildErrorDto().msg(msg);}}/***

调用Jenkins

注意查询类时xml为空涉及到使用xml内容创建、更新操作的xml不能为空**

param

Jenkins地址比如http://10.100.57.156:8080*

param

(!StringUtils.hasText(protocol))

{protocol

xml.getBytes(StandardCharsets.UTF_8);}CLI

cli

Stream.concat(Arrays.stream(baseArgs),

Arrays.stream(args)).toArray(String[]::new);log.info(executing

command:

JsonUtil.toJSONString(finalArgs));try

xmlData);}

e.getMessage();log.error(executing

command:

JsonUtil.toJSONString(finalArgs),

e);}return

uri.getScheme());CredentialsProvider

credsProvider

BasicCredentialsProvider();credsProvider.setCredentials(new

uri.getPort()),

UsernamePasswordCredentials(username,

password));AuthCache

BasicScheme();authCache.put(host,

httpClient

HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();HttpGet

httpGet

HttpClientContext.create();localContext.setAuthCache(authCache);if

{clz

EntityUtils.toString(response.getEntity());System.out.println(returnMsg);if

(StringUtils.hasText(returnMsg))

{data

ResultDto.buildSuccessDto().data(data);}return

ResultDto.buildSuccessDto().data(returnMsg);}

catch

ResultDto.buildErrorDto().data(data);}}



SEO优化服务概述

作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。

百度官方合作伙伴 白帽SEO技术 数据驱动优化 效果长期稳定

SEO优化核心服务

网站技术SEO

  • 网站结构优化 - 提升网站爬虫可访问性
  • 页面速度优化 - 缩短加载时间,提高用户体验
  • 移动端适配 - 确保移动设备友好性
  • HTTPS安全协议 - 提升网站安全性与信任度
  • 结构化数据标记 - 增强搜索结果显示效果

内容优化服务

  • 关键词研究与布局 - 精准定位目标关键词
  • 高质量内容创作 - 原创、专业、有价值的内容
  • Meta标签优化 - 提升点击率和相关性
  • 内容更新策略 - 保持网站内容新鲜度
  • 多媒体内容优化 - 图片、视频SEO优化

外链建设策略

  • 高质量外链获取 - 权威网站链接建设
  • 品牌提及监控 - 追踪品牌在线曝光
  • 行业目录提交 - 提升网站基础权威
  • 社交媒体整合 - 增强内容传播力
  • 链接质量分析 - 避免低质量链接风险

SEO服务方案对比

服务项目 基础套餐 标准套餐 高级定制
关键词优化数量 10-20个核心词 30-50个核心词+长尾词 80-150个全方位覆盖
内容优化 基础页面优化 全站内容优化+每月5篇原创 个性化内容策略+每月15篇原创
技术SEO 基本技术检查 全面技术优化+移动适配 深度技术重构+性能优化
外链建设 每月5-10条 每月20-30条高质量外链 每月50+条多渠道外链
数据报告 月度基础报告 双周详细报告+分析 每周深度报告+策略调整
效果保障 3-6个月见效 2-4个月见效 1-3个月快速见效

SEO优化实施流程

我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:

1

网站诊断分析

全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。

2

关键词策略制定

基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。

3

技术优化实施

解决网站技术问题,优化网站结构,提升页面速度和移动端体验。

4

内容优化建设

创作高质量原创内容,优化现有页面,建立内容更新机制。

5

外链建设推广

获取高质量外部链接,建立品牌在线影响力,提升网站权威度。

6

数据监控调整

持续监控排名、流量和转化数据,根据效果调整优化策略。

SEO优化常见问题

SEO优化一般需要多长时间才能看到效果?
SEO是一个渐进的过程,通常需要3-6个月才能看到明显效果。具体时间取决于网站现状、竞争程度和优化强度。我们的标准套餐一般在2-4个月内开始显现效果,高级定制方案可能在1-3个月内就能看到初步成果。
你们使用白帽SEO技术还是黑帽技术?
我们始终坚持使用白帽SEO技术,遵循搜索引擎的官方指南。我们的优化策略注重长期效果和可持续性,绝不使用任何可能导致网站被惩罚的违规手段。作为百度官方合作伙伴,我们承诺提供安全、合规的SEO服务。
SEO优化后效果能持续多久?
通过我们的白帽SEO策略获得的排名和流量具有长期稳定性。一旦网站达到理想排名,只需适当的维护和更新,效果可以持续数年。我们提供优化后维护服务,确保您的网站长期保持竞争优势。
你们提供SEO优化效果保障吗?
我们提供基于数据的SEO效果承诺。根据服务套餐不同,我们承诺在约定时间内将核心关键词优化到指定排名位置,或实现约定的自然流量增长目标。所有承诺都会在服务合同中明确约定,并提供详细的KPI衡量标准。

SEO优化效果数据

基于我们服务的客户数据统计,平均优化效果如下:

+85%
自然搜索流量提升
+120%
关键词排名数量
+60%
网站转化率提升
3-6月
平均见效周期

行业案例 - 制造业

  • 优化前:日均自然流量120,核心词无排名
  • 优化6个月后:日均自然流量950,15个核心词首页排名
  • 效果提升:流量增长692%,询盘量增加320%

行业案例 - 电商

  • 优化前:月均自然订单50单,转化率1.2%
  • 优化4个月后:月均自然订单210单,转化率2.8%
  • 效果提升:订单增长320%,转化率提升133%

行业案例 - 教育

  • 优化前:月均咨询量35个,主要依赖付费广告
  • 优化5个月后:月均咨询量180个,自然流量占比65%
  • 效果提升:咨询量增长414%,营销成本降低57%

为什么选择我们的SEO服务

专业团队

  • 10年以上SEO经验专家带队
  • 百度、Google认证工程师
  • 内容创作、技术开发、数据分析多领域团队
  • 持续培训保持技术领先

数据驱动

  • 自主研发SEO分析工具
  • 实时排名监控系统
  • 竞争对手深度分析
  • 效果可视化报告

透明合作

  • 清晰的服务内容和价格
  • 定期进展汇报和沟通
  • 效果数据实时可查
  • 灵活的合同条款

我们的SEO服务理念

我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。

提交需求或反馈

Demand feedback