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项目打包

org.springframework.boot

spring-boot-maven-plugin

2.7.6

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

com.spotify

dockerfile-maven-plugin

1.3.6

${project.artifactId}

target/${project.build.finalName}.jar

${project.build.finalName}

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位置),当点击部署的时候,自动增加当前项目版本号,并且对部署的服务进行版本号赋值。

相关文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: