96SEO 2026-02-23 12:09 8
。

建立有效的持续集成环境可以减少开发过程中一些不必要的问题、提高代码质量、快速迭代等;(Jenkins)
Integration,简称CI)用通俗的话讲就是持续的整合版本库代码编译后制作应用镜像。
建立有效的持续集成环境可以减少开发过程中一些不必要的问题、提高代码质量、快速迭代等;(Jenkins)
Deployment用通俗的话说即可以持续的部署到生产环境给客户使用这里分为两个阶段持续交付我理解为满足上线条件的过程但是没有上线持续部署即为上线应用的过程;(k8s)
研发人员通过Git将代码上传至Gitlab项目管理员审核代码后合并代码
Jenkins通过webhook获取Gitlab上的项目代码并通过maven打包构建镜像如果构建报错则可以通过邮件或钉钉等通知相关人员
镜像构建完成后Jenkins自动将镜像pull到Harbor镜像仓库
Harbor镜像仓库通过将镜像push到k8s集群运行k8s通过编排管理实现镜像服务的伸缩和高可用。
角色主机名ip地址备注masterk8s-master192.168.250.217
GitlabJenkinsDockerjenkins192.168.250.188
docker镜像仓库:harborharbor192.168.250.220
软件版本linuxcentos7docker26.1.3k8s1.22.2harbor2.0.6Jenkins2.457(尽量别用latest版本安装
NetworkManager会和network启动是发生冲突导致network启动失败不能远程访问虚拟机
/etc/sysconfig/network-scripts/ifcfg-ens33
IPV6_ADDR_GEN_MODEstable-privacy
UUID9c922cc8-b3ed-419a-88bd-6fd756e04880
http://mirrors.aliyun.com/repo/Centos-7.repo
http://mirrors.aliyun.com/repo/epel-7.repo
/etc/yum.repos.d/docker-ce.repo
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[https://2tefyfv7.mirror.aliyuncs.com]
添加主机名与ip的对应关系k8s-master、k8s-node1、k8s-node2
将桥接的ipv4流量传递到iptables的链k8s-master、k8s-node1、k8s-node2
net.bridge.bridge-nf-call-ip6tables
net.bridge.bridge-nf-call-iptables
安装kubeadm、kubelet、kubectlk8s-master、k8s-node1、k8s-node2
/etc/yum.repos.d/kubernetes.repo
baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgkeyhttps://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
修改docker的配置k8s-master、k8s-node1、k8s-node2
[https://2tefyfv7.mirror.aliyuncs.com]
这里从节点的kubelet.service状态报codeexited,
--apiserver-advertise-address192.168.163.151
registry.aliyuncs.com/google_containers
--pod-network-cidr10.244.0.0/16
官方文档https://github.com/flannel-io/flannel
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
sha256:f36824a14f1acb9413246e8f5f0cdf5f6060066f7e4eec6d27edd69004499f9f
[https://2tefyfv7.mirror.aliyuncs.com]
/data/gitlab/log:/var/log/gitlab
/data/gitlab/data:/var/opt/gitlab
切记:这里的端口要设置成80要不push项目会提示没有报错如果宿主机端口被占用需要把这个端口腾出来
external_url\thttp://192.168.163.155
gitlab_rails[‘gitlab_ssh_host’]
gitlab_rails[gitlab_shell_ssh_port]
gitlab_rails[gitlab_shell_ssh_port]
/data/gitlab/data/gitlab-rails/etc/gitlab.yml
在宿主机所在的物理机访问http://192.168.163.155/
会自动跳转到修改密码(root用户),如果密码设置的没有满足一定的复杂性则会报500需要从新设置
[https://2tefyfv7.mirror.aliyuncs.com]
harbor-offline-installer-v2.0.6.tgz
/config/log/rsyslog_docker.conf
/compose_location/docker-compose.yml
goharbor/notary-server-photon:v2.0.6
goharbor/clair-adapter-photon:v2.0.6
goharbor/harbor-jobservice:v2.0.6
goharbor/notary-signer-photon:v2.0.6
goharbor/harbor-registryctl:v2.0.6
goharbor/trivy-adapter-photon:v2.0.6
goharbor/chartmuseum-photon:v2.0.6
goharbor/registry-photon:v2.0.6
/config/log/rsyslog_docker.conf
/config/log/rsyslog_docker.conf
/compose_location/docker-compose.yml
CI服务器的docker配置jenkins:192.168.163.155
这里因为我们要在192.168.163.155(CI服务器)上push镜像到192.168.163.156(私仓)所有需要修改CI服务器上的Docker配置。
[https://2tefyfv7.mirror.aliyuncs.com],
192.168.163.156/library/gitlab-ce
192.168.163.156/library/gitlab-ce
CD服务器的docker配置k8s-master、k8s-node1、k8s-node2
编辑/lib/systemd/system/harbor.service
/lib/systemd/system/harbor.service
Documentationhttp://github.com/vmware/harbor
ExecStart/usr/bin/docker-compose
/root/harbor/docker-compose.yml
ExecStop/usr/bin/docker-compose
/root/harbor/docker-compose.yml
/lib/systemd/system/harbor.service
六、安装配置jenkinsjenkins:192.168.163.155
更换国内清华大学镜像,Jenkins下载插件特别慢更换国内的清华源的镜像地址会快不少
/jenkins/hudson.model.UpdateCenter.xml
s#updates.jenkins.io/update-center.json#mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json#g
/jenkins/hudson.model.UpdateCenter.xml
/jenkins/hudson.model.UpdateCenter.xml
s#https://www.google.com/#https://www.baidu.com/#g
/jenkins/secrets/initialAdminPassword
需要修改jenkins绑定的docker的启动参数ExecStart/usr/bin/dockerd
--containerd/run/containerd/containerd.sock
/lib/systemd/system/docker.service
需要修改harbor(192.168.163.156)的docker的启动参数ExecStart/usr/bin/dockerd
--containerd/run/containerd/containerd.sock
/lib/systemd/system/docker.service
Image时使用定义了用那个服务器的docker执行docker命令
xmlnshttp://maven.apache.org/POM/4.0.0
xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd
groupIdorg.springframework.boot/groupId
artifactIdspring-boot-starter-parent/artifactId
docker.repostory192.168.163.156/docker.repostory
docker.registry.namedemo/docker.registry.name
docker.image.tag0.0.1/docker.image.tag
docker.maven.plugin.version1.4.10/docker.maven.plugin.version
groupIdorg.springframework.boot/groupId
artifactIdspring-boot-starter-web/artifactId
groupIdorg.projectlombok/groupId
groupIdorg.springframework.boot/groupId
artifactIdspring-boot-starter-test/artifactId
groupIdorg.springframework.boot/groupId
artifactIdspring-boot-maven-plugin/artifactId
groupIdorg.projectlombok/groupId
artifactIddockerfile-maven-plugin/artifactId
version${docker.maven.plugin.version}/version
contextDirectory${project.basedir}/contextDirectory
useMavenSettingsForAuthtrue/useMavenSettingsForAuth
repository${docker.repostory}/${docker.registry.name}/${project.artifactId}/repository
JAR_FILEtarget/${project.build.finalName}.jar/JAR_FILE
src/main/resources下所有文件及文件夹为资源文件
directorysrc/main/resources/directory
targetPath${project.build.directory}/classes/targetPath
org.springframework.web.bind.annotation.GetMapping;
org.springframework.web.bind.annotation.RequestMapping;
org.springframework.web.bind.annotation.RestController;
#添加依赖环境前提是将Java8的Docker镜像从官方镜像仓库pull下来然后上传到自己的Harbor私有仓库中
-Djava.security.egdfile:/dev/./urandom,
192.168.163.156/demo/demo:0.0.1
在jenkins服务器(192.168.163.155)上拉取java8镜像然后推送至harbor仓库一会打包构建docker镜像的时候会用到。
jenkins执行构建命令时需要ssh访问jenkins容器所在服务器192.168.163.155和k8s主节点服务器192.168.163.151所以需要配置ssh免密登录
在jenkins容器所在服务器192.168.163.155上进入jenkins容器
将公钥复制到jenkins容器所在服务器192.168.163.155
将公钥复制到k8s主节点服务器192.168.163.151)
创建私有镜像仓库Secretk8s主节点服务器192.168.163.151
k8s需要从harbor私有进行仓库拉取镜像时需要创建Secret配置harbor私有镜像仓库地址、账号密码
harbor-registry是自定义的名称与demo.yaml中的imagePullSecrets.name值一致
安装jdk和maven(jenkins:192.168.163.155)
https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
MAVEN_HOME/usr/local/apache-maven-3.6.3
JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64
PATH$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
192.168.163.156/demo/demo:0.0.1
/usr/local/apache-maven-3.6.3/bin/mvn
/jenkins/workspace/demo/pom.xml
192.168.163.156/demo/demo:0.0.1
/var/jenkins_home/workspace/demo/demo.yaml
访问应用192.168.163.151:30001/api/test
还需要手动在jenkins中构建项目下面整合Jenkins和gitlab使用gitlab的webhook功能实现代码提交到gitlab后
访问应用192.168.163.151:30001/api/test
至此搭建GitlabJenkinsDockerHarborK8s集群搭建CICD平台完成
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback