当前位置: 首页 > news >正文

Jenkins使用(代码拉取->编译构建->部署上线)

Jenkins简介

Jenkins是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更重要的业务逻辑实现上。同时Jenkins能实时监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象的展示项目构建的趋势和稳定性。


如何配置

配置路线大体可以参考《Jenkins持续集成入门到精通》.pdf

链接:https://pan.baidu.com/s/1lGq0D1NhojqTaqLBnF8LPw 提取码:6666

虚拟机安装Jenkins

  因为Jenkins是java语言写的,所以首先在208机器上配置jdk,版本为11,然后下载配置Jenkins,maven,Git,完全按照《Jenkins持续集成入门到精通》上的可能会有版本过老导致Jenkins上面的可下载插件不兼容的问题,这个时候可以下载新的Jenkins配置一下就可以解决。

详细配置可参考:《Jenkins持续集成入门到精通》中Jenkins安装和持续集成环境配置

Jenkins凭证管理

《Jenkins持续集成入门到精通》上面是集成gitlab,集成云效跟教程里的效果一样,具体操作:

一、点击红框处

在这里插入图片描述

二、

在这里插入图片描述

三、

在这里插入图片描述

四、

在这里插入图片描述

五、在下面具体配置:

在这里插入图片描述

类型我们一般选择HTTPS账户密码类型的或者ssh类型的(在项目中我是用的HTTPS类型的)

在这里插入图片描述

范围默认就行

用户名和密码需要填写(取自云效)

1、点击个人设置
在这里插入图片描述

2、设置账户密码

在这里插入图片描述

3、回到第五步,将账户密码设置上去点击创建即可。

ID、描述可以不写

六、至此,你的就会保存,同时生成唯一标识。

测试凭证是否通过:可继续参考 《Jenkins持续集成入门到精通》-> 持续集成环境(4)

Maven配置

参考**《Jenkins持续集成入门到精通》-> 持续集成环境(5)-Maven安装和配置**

pipeline流水线

在此次平台建设过程中,我们需要对项目进行CICD,可以使用流水线来对项目进行自动拉取,构建,部署。

pipeline使用方式可直接参考:《Jenkins持续集成入门到精通》->Jenkins项目构建类型(4)-Pipeline流水线项目构建


具体使用

下面我利用Jenkins结合ns-service-support-user微服务进行持续集成部署操作。

第一步、部署前,需要在项目中添加相关依赖以及文件。

1、springboot项目打包

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.6</version>
</plugin>

2、添加dockerfile-maven-plugin依赖,添加此依赖后,可以通过dockerfile编译生成镜像

<plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>1.3.6</version><configuration><repository>${project.artifactId}</repository><buildArgs><JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE><PRO_NAME>${project.build.finalName}</PRO_NAME></buildArgs></configuration>
</plugin>

3、当前项目根目录添加dockerfile文件(把当前项目jar包生成docker镜像)

FROM openjdk:11
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
COPY ./lib/skywalking-agent.jar ./lib/skywalking-agent.jar
EXPOSE 8098
ENTRYPOINT ["java","-javaagent:./lib/skywalking-agent.jar","-Dskywalking.agent.service_name=","-Dskywalking.collector.backend_service=192.168.192.168.xxx.xxx:11800","-jar","/app.jar"]

4、当前项目根目录添加Jenkinsfile文件对应Jenkins流水线

node {stage('拉取代码') {checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])echo "拉取完成"
}
stage('编译构建') {
def code = sh (script: "docker ps | grep ${Microservices}",returnStatus: true
)
// code 为0 代表 grep 找到 了 ${Microservices} 相关 的 container
if (code==0){
//首先停止并删除一个容器xsh ("docker ps -f name=${Microservices} -q | xargs --no-run-if-empty docker container kill")sh ("docker ps -f name=192.168.xxx.xxx:5000/${Microservices} -q | xargs --no-run-if-empty docker container kill")sh ("sleep 10s")sh ("docker container ls -a -f name=${Microservices} -q | xargs -r docker container rm -f")sh ("docker container ls -a -f name=192.168.xxx.xxx:5000/${Microservices} -q | xargs -r docker container rm -f")sh ("sleep 10s")
//删除镜像
//    sh ("docker rmi ${Microservices}")sh ("docker rmi -f 192.168.xxx.xxx:5000/${Microservices}")
}
//调用当前微服务dockerfile
sh label: '', script: 'mvn clean package -e -X -U dockerfile:build'
sh "/mydata/hostmachine_jenkins/version/version_up.sh ${Microservices} ${NEW_VERSION}"
def PROJECT_VERSION = readFile "/mydata/hostmachine_jenkins/version/${Microservices}"
// def NEW_VERSION="${PROJECT_VERSION}"
//将当前进镜像名修改为192.168.192.168.xxx.xxx:5000/${Microservices}:${NEW_VERSION}
sh ("docker tag ${Microservices}:latest 192.168.192.168.xxx.xxx:5000/${Microservices}:${PROJECT_VERSION}")
//push到私有仓库中
sh ("docker push 192.168.192.168.xxx.xxx:5000/${Microservices}:${PROJECT_VERSION}")
echo "构建完成"
}
stage('部署上线'){
//sh "docker run -d --net=swarm-test --name ${Microservices} -p ${port}:${port} ${Microservices}"
//sh ("docker stack deploy --compose-file=/mydata/hostmachine_jenkins/jenkins_deploy.yml api")
def PROJECT_VERSION = readFile "/mydata/hostmachine_jenkins/version/${Microservices}"
//按行读取
def lines = PROJECT_VERSION.split("\n")[0]
echo "$lines"
sh "docker service update --image 192.168.192.168.xxx.xxx:5000/${Microservices}:${lines} qa_${Microservices}"
echo "部署完成"
sh ("sleep 10s")
sh ("java -jar /mydata/hostmachine_jenkins/dingding.jar jenkins ${deployer}${publishTime}${Microservices}模块更新至${lines},部署已完成")
}
}

新建任务,选择流水线项目

在这里插入图片描述

创建完毕会跳到configuration配置界面,点击流水线,

定义选择pipeline script from SCM

Repository URL复制云效上项目的HTTPS

在这里插入图片描述
在这里插入图片描述

Credentials选择之前创建的全局凭证

在这里插入图片描述

指定分支写上你需要用的

继续往下滑,会看到脚本路径这个参数,这个就是对应你项目上的Jenkinsfile文件

在这里插入图片描述

继续

点击General,选择参数化构建过程并点击添加参数

在这里插入图片描述

添加凭据参数

在这里插入图片描述

添加选项参数(这个只针对当前项目其实可以在项目中写死就够了)

添加文本参数

在这里插入图片描述

添加选项参数(同样只针对当前项目可以写死)

在这里插入图片描述

添加port,对应项目中的port

添加部署人员,方便知道当前是谁部署了项目

在这里插入图片描述

添加时间参数,对应钉钉消息提示

在这里插入图片描述

添加版本号,手动输入更迭版本号

在这里插入图片描述

以上的参数就是对应的Jenkinsfile文件中的${***},当点击构建的时候对应的参数就会映射到Jenkinsfile文件中。

构建触发器,作用是自动出发构建项目

在这里插入图片描述

使用方式请直接参考:《Jenkins持续集成入门到精通》->Jenkins项目构建细节(1)-常用的构建触发器

设置好后,可以先点击应用然后保存

进入自己创建的项目,界面如下:

在这里插入图片描述

点击build with parameter,选择或者填写对应的参数

在这里插入图片描述

PROJECT_VERSION项目版本号参数如果不知道上一个版本,我们可以到portainer中查看对应的服务后缀,此后缀就是对应的当前正在运行的项目版本号。

在这里插入图片描述

此时PROJECT_VERSION可以设为1.0.5

在这里插入图片描述

所有参数设置好后,点击开始构建按钮,等待他构建完成

在这里插入图片描述

正常情况下会全流程走完,如下:

在这里插入图片描述

可以悬停在对应位置并点击logs查看当前流程的日志

在这里插入图片描述

或者可以点击console output查看全流程日志

在这里插入图片描述

验证:

部署成功会有消息提醒

在这里插入图片描述

这个时候看portainer中的服务列表,可以看到服务正在运行,而且版本已经从1.0.4升级到1.0.5了

在这里插入图片描述

访问当前服务的验证接口,查看是否能正常访问

在这里插入图片描述

异常情况会在某个阶段爆红,这时候就需要查看日志定位具体报错位置具体解决了

在这里插入图片描述

笔记:

添加定时任务脚本:/mydata/hostmachine_jenkins/images_clean.sh(208位置),定时每天10/12/14三个时间段清除虚悬镜像以及当前项目之前版本未使用的镜像

添加版本自增脚本:/mydata/hostmachine_jenkins/version_up1.sh(208位置),当点击部署的时候,自动增加当前项目版本号,并且对部署的服务进行版本号赋值。
在这里插入图片描述

http://www.lryc.cn/news/1407.html

相关文章:

  • IEEE期刊论文投稿前期准备
  • [AAAI 2022] TransFG: A Transformer Architecture for Fine-grained Recognition
  • 机器学习之决策树原理详解、公式推导(手推)、面试问题、简单实例(python实现,sklearn调包)
  • 一文搞懂CAS实现原理——怀玉
  • typora每次复制文档都要附带图片文件夹?学会配置gitee图床
  • Linux--gdb
  • c++11 标准模板(STL)(std::multimap)(二)
  • 【数据结构】二叉排序树——平衡二叉树的调整
  • 03- pandas 数据库可视化 (数据库)
  • 第三方电容笔怎么样?开学适合买的电容笔
  • Java学习-IO流-字节输出流
  • linux性能分析 性能之巅学习笔记和内容摘录
  • 机器学习笔记之生成模型综述(三)生成模型的表示、推断、学习任务
  • 第八章 Flink集成Iceberg的DataStreamAPI、TableSQLAPI详解
  • PyTorch学习笔记:nn.Sigmoid——Sigmoid激活函数
  • 个人学习系列 - 解决拦截器操作请求参数后台无法获取
  • 【编程基础之Python】2、安装Python环境
  • Java开发 - 问君能有几多愁,Spring Boot瞅一瞅。
  • Office Server Document Converter Lib SDK Crack
  • Cubox是什么应用?如何将Cubox同步至Notion、语雀、在线文档中
  • 计算机网络-传输层
  • HTML-CSS-js教程
  • 【Nacos】Nacos配置中心客户端启动源码分析
  • 中国特色地流程管理系统,天翎让流程审批更简单
  • Python算法:DFS排列与组合算法(手写模板)
  • 拿来就用的Java海报生成器ImageCombiner(一)
  • 【C++】类和对象(二)
  • UDP协议
  • IT人的晋升之路——关于人际交往能力的培养
  • Docker进阶 - 8. docker network 网络模式之 container