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){
//首先停止并删除一个容器x
    sh ("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位置),当点击部署的时候,自动增加当前项目版本号,并且对部署的服务进行版本号赋值。
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

折翼、csf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值