网站设计 色彩,90设计网站官网入口,小电商平台有哪些,wap 网站模板使用GitLabJenkins搭建CI\CD执行环境 前言什么是DevOps#xff1f;什么是CI/CD#xff1f;使用GitLabJenkins搭建CI\CD执行环境GitLab安装1. 安装和配置所需的依赖2. 下载并安装极狐GitLab3. 登录极狐GitLab 实例4.常用gitlab指令5.修改密码 Jenkins安装1.Jenkins 的主要特点… 使用GitLabJenkins搭建CI\CD执行环境 前言什么是DevOps什么是CI/CD使用GitLabJenkins搭建CI\CD执行环境GitLab安装1. 安装和配置所需的依赖2. 下载并安装极狐GitLab3. 登录极狐GitLab 实例4.常用gitlab指令5.修改密码 Jenkins安装1.Jenkins 的主要特点和用途2.下载3.启动4.配置镜像源5.配置与初始化 基于GitLabJenkins快速实现CI\CD1、创建一个maven项目2、配置项目构建及部署过程 项目打包及部署方式可能出现的问题以及优化 前言
本篇文章主要讲解一些运维方面的知识但不会涉入大深毕竟我只是一个后端开发人员。但是就会有很多小伙伴问了我做后端开发的为什么要学习运维人员的知识?那要运维的人干什么等等等等…我要说的是虽然现在一个产品的开发划分了很多的部分比如前端后端测试运维等等但是现在企业也会要求求职人员具备一些其他方面的知识为什么呢?因为当我们系统报错的时候都有判断出到底是哪里出错了快速对问题进行解决而不是运维人员发现问题就将系统停掉再交给开发人员进行修改这样太浪费时间。因此在现代化的大型软件项目中对于开发人员的要求也更为全面。虽然开发人员不要求像专业的运维人员一样掌握服务器的各种安全策略、参数调优等。但是对于基础的运行环境运维操作也必须要了解这样才能指导运维人员进行业务环境部署也就是开发运维一体化。虽然现在有很多工具能够帮助开发人员减少一些复杂的操作但是开发人员还是需要更多的接触运维的工作。由于开发和运维分开也给项目开发过程中带来了很多困难。一方面开发人员只能向运维人员描述具体的部署方式。但是由于开发人员无法接触到生产服务器所以文字描述的方式往往很难保证操作的准确性。经常会出现开发人员在开发环境运行得很好的迭代包升级到生产环境上之后无法保证升级的效果。对于现在流行的基于敏捷开发的大型项目来说很多需求需要以代码分支的方式进行并行开发然后再合并部署这其中更是非常容易出现错误造成生产环境不稳定。另一方面当项目在线上运行出现故障时开发人员也很难第一时间接触到错误日志。如果线上出现问题开发人员往往需要找运维部门协同才能获取到生产环境的服务日志。这会极大的延缓错误排查的及时性。为了解决这些问题就诞生了DevOps和CI/CD。
什么是DevOps
DevOps是Development(开发)和Operation(运维)两个单词的组合他是一种重视软件开发人员和运维技术人员之间沟通合作的文化、运动或者惯例。通过自动化软件交互和架构变更的流程使得构建、测试、发布软件时能够更加快捷、频繁和可靠。总的来说更偏向于是一种标准一种规范。
什么是CI/CD CI/CD可以说就是DevOps的具体实现 CI\CD中的CI指的是持续集成Continuous Integeration他是开发人员的自动化过程。成功的CI意味着人员同的新代码变更会定期构建、测试并合并到共享存储库(比如Git或者SVN)。而CD指的是持续交付Continuous Delivery和持续部署Continuous Deployment。成功的CD意味着运维人员可以从共享存储库中持续获取到最新的产品副本并确保最新的产品副本可以正确更新到服务器上。
使用GitLabJenkins搭建CI\CD执行环境
了解了一些运维的官方术语后我们就快速的尝试搭建一下CI\CD执行环境。
GitLab安装
GitLab是企业中最为常用的私有代码仓库解决方案。你可以把他理解为一个企业自己搭建的GitHub或者Gitee。企业通常会通过GitLab搭建自己的代码仓库开发人员的应用代码都通过GitLab进行协同开发。
GitLab是一个开源项目分为免费的ce社区版和收费的ee企业版。这里介绍ce社区版的安装过程。
1. 安装和配置所需的依赖
在 CentOS 7 上下面的命令会在系统防火墙中打开 HTTP、HTTPS 和 SSH 访问。这是一个可选步骤如果您打算仅从本地网络访问极狐GitLab则可以跳过它。
sudo yum install -y curl policycoreutils-python openssh-server perl //依赖插件
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --add-servicehttp
sudo firewall-cmd --permanent --add-servicehttps
sudo systemctl reload firewalld可选如果要使用 Postfix 来发送电子邮件通知执行以下安装命令。
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix在安装 Postfix 的过程中可能会出现一个配置界面在该界面中选择“Internet Site”并按下回车。把“mail name”设置为您服务器的外部 DNS 域名并按下回车。如果还有其他配置界面出现继续按下回车以接受默认配置。
如果您想使用其他解决方案发送电子邮件请跳过上面 Postfix 安装步骤并在安装极狐GitLab 后配置外部 SMTP 服务器。
2. 下载并安装极狐GitLab
执行以下命令配置极狐GitLab 软件源镜像。
curl -L get.gitlab.cn | bash接下来安装极狐GitLab。安装之前需要确保您的DNS设置正确。
此外如果需要修改访问的地址和端口可以修改/etc/gitlab/gitlab.rb配置文件修改其中的external_url属性即可
external_url http://192.168.101.65:8090如果您想为初始管理员用户 root 指定自定义的初始密码可以根据文档指导进行配置。否则将默认生成随机密码。
接下来执行如下命令开始安装
sudo EXTERNAL_URLhttps://gitlab.example.com yum install -y gitlab-jh3. 登录极狐GitLab 实例
使用第二步 EXTERNAL_URL 中配置的地址来访问安装成功的极狐GitLab 实例。用户名默认为 root 。如果在安装过程中指定了初始密码则用初始密码登录如果未指定密码则系统会随机生成一个密码并存储在 /etc/gitlab/initial_root_password 文件中 查看随机密码并使用 root 用户名登录。 注意出于安全原因24 小时后/etc/gitlab/initial_root_password 会被第一次 gitlab-ctl reconfigure 自动删除因此若使用随机密码登录建议安装成功初始登录成功之后立即修改初始密码。
服务启动完成后就可以访问gitlab服务了。用自己修改的ip加端口访问。 接下来就可以登录进入GitLab维护基础权限信息并将项目代码上传到Git仓库当中。这些基础的操作跟GitHub或者Gitee基本上是一样的。
4.常用gitlab指令 gitlab-ctl reconfigure 重新配置gitlab。 gitlab-ctl start 启动gitlab gitlab-ctl stop 停止gitlab gitlab-ctl restart 重启gitlab gitlab-ctl status 查看gitlab服务状态 gitlab-ctl tail 查看gitlab服务日志。
5.修改密码
如果忘记密码怎么办输入一下指令即可
gitlab-rails console //连接gitlab
uUser.where(id:1).first //拿到root账户
u.password12345678
u.password_confirmation12345678 //修改密码为12345678
u.save! //保存
exit //关闭连接
gitlab-ctl restart 重启gitlab完成以上操作使用新密码登录即可。
Jenkins安装
1.Jenkins 的主要特点和用途
自动化构建Jenkins 可以从源代码库如Git、SVN 等中获取最新的代码并自动进行构建。它支持各种构建工具和构建脚本如Ant、Maven、Gradle 等。
持续集成Jenkins 可以将多个开发者的代码集成到共享的主线分支中并定期执行构建和测试。这有助于发现和解决集成问题确保软件的稳定性和可靠性。
测试自动化Jenkins 可以与各种测试框架和工具集成如 JUnit、Selenium、JMeter 等。它可以自动执行各种测试并生成测试报告和分析结果。
部署自动化Jenkins 可以自动化部署应用程序到目标服务器或云平台。它支持各种部署工具和配置管理工具如 Docker、Kubernetes、Ansible 等。
插件生态系统Jenkins拥有一个强大的插件生态系统提供了各种功能和集成选项。用户可以根据需要选择和安装插件以扩展和定制 Jenkins 的功能。
2.下载
Jenkins是企业最常用的一个自动化部署软件。下载地址为https://www.jenkins.io/download/ 。建议下载LTS(长期支持)版本的war包部署。下载获取jenkins.war文件。
首先需要安装JDK。 Jenkins运行需要JDK环境支持。Java Support Policy通过这个链接对照自己jdk版本下载合适的war包
War Jenkins的历史版本链接 我下方演示的是jdk17和Jenkins2479.2.因为用其他版本安装插件比较麻烦所以选择最新的版本。
3.启动
配置完成就可以直接启动Jenkins。 启动指令
java -jar Jenkins.war --httpPort8080 //默认端口8080可指定别的端口
nohup java -jar jenkins.war //后台启动。这种方式不会占用当前命令行窗口日志输出到nohup.out下。在第一次启动的过程中Jenkins会在日志文件中打印默认的admin用户密码。这个需要留意一下。
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
e3c2de8a2084429ea733ef30512a0523
This may also be found at: /root/.jenkins/secrets/initialAdminPassword
*************************************************************4.配置镜像源
建议先配置镜像地址因为后续需要下载插件会很慢
找到 jenkins 的工作目录.jenkins 查看启动日志信息信息里面告诉了工作目录位于什么地方。
找到 hudson.model.UpdateCenter.xml 文件打开.将 https://updates.jenkins.io/update-center.json 替换成国内镜像网址需要管理员权限修改
国内镜像网址https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
updates 目录下编辑 default.json 文件将该文件中国外的地址全部替换成国内的需要管理员权限修改
https://www.google.com 替换成 https://www.baidu.com
https://updates.jenkins.io/download 替换成 https://mirrors.tuna.tsinghua.edu.cn/jenkins修改完配置之后需要重启 jenkins。
5.配置与初始化
启动完成后就可以访问Jenkins的前台管理页面http://localhost:8080/。第一次访问时前端页面会会引导进行一些初始化工作。例如需要输入admin用户的默认密码这个密码就在启动日志当中。 然后会引导安装一些插件。这一步比较自由。你可以按照默认方式安装也可以选择一些你认识的常用插件安装。关键插件漏了没有关系后续也可以再安装插件。建议后面自己按需安装。 配置管理员账号密码 再配置一下端口就能正常的访问localhost替换成127.0.0.1使用然后就可以进入到jenkins的首页。 接下来需要安装几个核心的插件。选择 Manage Jenkins- Manage Plugins进入插件管理页面。 在这里需要安装几个核心的插件。包括Git 、Git client、NodeJS Plugin、Maven integration plugin。如果你希望Jenkins能够更多的显示中文还可以安装 Localization:Chinese(Simplified)插件。下载完成后有些插件需要重启才能生效。Jenkins重启的方式是直接在浏览器上访问restart接口。 基于GitLabJenkins快速实现CI\CD
接下来需要在Jenkins中配置一个构建任务。下面就以一个demo项目的后端工程为例演示配置过程。
1、创建一个maven项目
在Jenkins首页选择新建Item然后选择构建一个maven项目 2、配置项目构建及部署过程
接下来在Jenkins中配置项目的配置项还是挺多的这里只列出几个关键的配置。其他部分可以自行调整。
首先需要在源码管理部分配置对应的git仓库地址从gitlab上拉取源代码。 构建触发器部分可以选择配置Poll SCM选项。这个选项可以定时扫描Git代码仓库。当发现Git仓库代码有变化即有代码提交时就会触发一次构建任务. 这里面Poll SCM是一个比较常用的配置。通过这个配置可以让jenkins定期去检查代码库。如果发现代码库有更新则自动触发当前任务完成项目的构建以及部署。当前项目编译任务太重提交也不太频繁所以就选择不配置该属性。 接下来的Build部分就可以选择需要执行的编译脚本。 这一步相当于指定使用 mvn package -Dmaven.test.skiptrue指令对后端项目进行重新打包构建。 如果是前端项目就需要用Nodejs的npm run build指令来构建。 构建完成之后就会在后端项目的各个模块的target目录下生成可执行的包。这时可以选择用Jenkins将这些Jar包分发到远程服务器上并直接运行。 前端项目也可以用同样的方式传递到远端服务器上。远端指令只需要执行 nginx -s reload 更新一下即可。 这样就完成了一个基础项目的配置过程。接下来保存之后就可以选择Jenkins首页对应项目右侧的三角指令发起一次构建了。构建过程中如果有问题可以查看构建日志进行排查。 这里完成的是一个最简单的Maven项目构建。实际上在企业中还会构建更复杂的任务。 例如集成Docker进行虚拟化部署。 添加Blue Ocean插件做一些代码质量检测邮件通知等复杂的步骤。甚至使用Pepeline构建更为复杂的任务流水。 或者搭建SonarQube服务并通过jenkins集成。这样就可以使用SonarQube服务来进行代码质量检测。 项目打包及部署方式可能出现的问题以及优化
基于Jenkins的CI\CD配置方式就是执行Maven对项目进行编译然后将Jar包传到远端服务器上执行。这个过程跟我们手动进行任务部署是差不多的只不过Jenkins将这些过程自动完成了。
但是这里其实有一个小问题。当前电商项目在编译时是在pom.xml中采用SpringBoot的Maven插件将整个项目打成了一个可执行的Jar包。 这样打出来的Jar包可以直接使用Java -jar指令执行。
buildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion2.3.2.RELEASE/versionexecutionsexecutiongoalsgoalrepackage/goal/goals/execution/executions!-- 解决运行包不能被其他包依赖的问题 --configurationclassifierexec/classifier/configuration/plugin/plugins
/build但是这种方式也有一个很大的问题就是Jar包太大了。这么大的Jar包编译会很耗时并且在网络中传输是非常麻烦的。所以对于一些大型项目通常不会采用这种一体化的fat Jar的方式。而会选择将依赖单独打成小的Jar包。这样后续每次更新只需要更新调整过的少量Jar包即可。那有哪些Maven打包方式可以帮助我们打出小的jar包呢
其实Maven提供了很多的打包插件。例如将上面的plugin部分替换为maven-dependency-plugin就可以将项目打成小包。
plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-dependency-plugin/artifactId!-- version2.10/version --executionsexecutionidcopy-dependencies/idphasepackage/phasegoalsgoalcopy-dependencies/goal/goalsconfigurationoutputDirectoryexport/outputDirectory !-- 将依赖包放入export文件夹 --excludeTransitivefalse/excludeTransitivestripVersiontrue/stripVersion/configuration/execution/executions
/plugin通过这种方式就可以将所有依赖的jar包都放到export文件夹中target目录下的jar包只包含当前项目的源码文件大小就会小很多。
将export目录下的所有jar包和target下的当前项目jar包上传到服务器的同一个目录当中就可以直接运行了。这种方式就跟很多开源框架的运行方式相似了。至于要如何运行呢当然就不能用java -jar指令简单执行了需要通过java -cp指令指定依赖包和主启动类执行。至于如何使用这个指令你之前学过的很多开源组件都可以提供帮助了。比如shardingproxy、RocketMQ等都有这样的脚本。
这里也给出一个简单的Linux执行脚本示例供你参考。
more runapp.sh
#!/bin/sh
#执行jar包
RUN_LIBS
#依赖jar包 自行制定目录
SUPPORT_LIBS
RUN_LIB_PATH/app/lib
SUPPORT_LIB_PATH/app/support
#加载程序包
for i in ${RUN_LIB_PATH}/* ; doRUN_LIBS${RUN_LIBS}:$i
done
#加载依赖包
for i in ${SUPPORT_LIB_PATH}/* ; doSUPPORT_LIBS${SUPPORT_LIBS}:$i
done
#整合classpath
CLASSPATH${RUN_LIBS}:${SUPPORT_LIBS}
export CLASSPATH
#调用java指令执行。-D输入参数 java中可以用 System.getProperties读取。同时指定执行入口类 SpringBootApplication 这是一个典型的Springboot的执行方式。
java -Xdebug -Xnoagent -Djava.compilerNONE -Xrunjdwp:transportdt_socket,servery,address27899,suspendn -cp $CLASSPATH -Dspring.profiles.activeprod com.tuling.TulingmallCartApplication -D
user.timezoneGMT08 1tulingmall-admin.out 2tulingmall-admin.err
echo Start App Success!实际上这样定制脚本对于提高运行效率是非常重要的你学了很多次的JVM调优就体现在脚本定制的过程中。在脚本最后的java指令中可以添加哪些优化参数 另外这种部署方式你可以自己尝试用jenkins配置自动部署吗 实际上Maven还提供了非常多插件。比如对于很多复杂的项目可能需要将不同的模块输出到多个不同的jar包当中而不是所有代码全都输出一个jar包。下面就是使用maven-jar-plugin插件的一个可行的示例将不同模块的代码分别整合到test1.jar和test2.jar中。有兴趣你可以自己尝试下。
plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-jar-plugin/artifactId version3.0.2/version configuration !-- manifest配置信息 主要是可以配置主执行类。有主执行类可以用java-jar直接执行。没有的话就需要指定执行类 --archive manifest addClasspathtrue/addClasspath classpathPrefixsupport//classpathPrefix mainClasscom.kklmars.Test1Application/mainClass
!-- 可以按上面的方式自己配置也可以指定MF文件打包。 --manifestFile${project.build.outputDirectory}/META-INF/MANIFEST.MF/manifestFile/manifest /archive /configurationexecutions execution idtest2-jar/id phasepackage/phase goals goaljar/goal /goals configuration classifiertest1/classifier includes includecom/kklmars/**/include includemybatis/**/include includetemplates/**/include include*.properties/include includedubbo.xml/include /includes /configuration /execution execution idtest2-jar/id phasepackage/phase goals goaljar/goal /goals configuration classifiertest2/classifier includes includecom/test2/crawler/*/include includecom/test2/crawler/*/include includecom/test2/utils/**/include includelog4j.properties/include /includes /configuration /execution /executions
/plugin如果你对Maven感兴趣可以去Maven官网上看看Maven目前官方提供的插件。 https://maven.apache.org/plugins/index.html。 这上面能找到非常多有趣的插件并且都有详细的说明。比如changelog插件可以打印出Maven仓库中最近的提交记录。checkstyle和pmd插件可以对代码进行静态检查。javadoc插件可以打印出项目文档你还可以用pdf插件打印出pdf版本的项目文档。或者使用antrun插件去执行一些ant脚本(老程序员应该对ant很熟悉)。
以上就是本篇博客的全部内容环境这块配置也是十分复杂的总容易出现各种各样的问题我也在配置过程中不断进行修正最终成功运行希望各位小友在阅读后也能自己动手实践。遇到问题自己动手解决这样才能够收获更多的经验。最后希望各位能够点赞关注收藏让我能够发表更多的文章。