1987WEB视界-分享互联网热门产品和行业

您现在的位置是:首页 > WEB开发 > 正文

WEB开发

Jenkins实现CICD流程

1987web2023-10-06WEB开发155
使用kubeadm搭建k8s集群

使用kubeadm搭建k8s集群

k8s中的NetWork

k8s中的NetWork-ingress实战

CICD

持续集成(Continuous Integration)持续交付(Continuous Delivery)持续部署(Continuous Deployment)

项目提交到github,然后Jenkins通过github的变化拉取代码进行maven构建,并把构建好的项目Jar包制作成image上传到doker或者阿里云仓库中,k8s集群再从镜像仓库中拉取镜像进行部署运行,整个过程全是自动化的,这个过程就是CICD的过程。

1.环境准备

基础环境准备[在jenkins那台机器上安装]

- 安装java

(1)找到jdk资源上传到指定机器

上传jdk到服务器的文件夹中java/jdk-8u181-linux-x64.tar.gz解压jdktar-zxvf jdk-8u181-linux-x64.tar.gz

(2)配置jkd环境变量

编辑文件vim /etc/profile添加如下内容exportJAVA_HOME=/usr/local/java/jdk1.8.0_181exportCLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jarexportPATH=$PATH:${JAVA_HOME}/bin使配置文件生效source/etc/profile测试java -version

- 安装maven

(1)找到maven资源上传到指定机器

上传mavne到服务器的文件夹中java/apache-maven-3.6.2-bin.tar.gz解压jdktar-zxvf apache-maven-3.6.2-bin.tar.gz

(2)配置maven环境变量

编辑文件vim /etc/profile添加如下内容exportMAVEN_HOME=/usr/local/maven/apache-maven-3.6.2exportPATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin使配置文件生效source/etc/profile测试mvn -version

(3)配置maven的阿里云镜像

<mirror><id>alimavenid><name>aliyun mavenname><url>http://maven.aliyun.com/nexus/content/groups/public/url><mirrorOf>centralmirrorOf>mirror>

- 安装配置git

(1)下载安装

yuminstall git

(2)配置git

全局设置git config --globaluser.name"yp1527"git config --globaluser.email"abm520@126.com"生成公钥并上传到github【公钥路径:/root/.ssh/id_rsa.pub】ssh-keygen -t rsa -C"abm520@126.com"

安装配置Jenkins

jenkins官网:https://jenkins.io/

入门指南:<https://jenkins.io/zh/doc/pipeline/tour/getting-started/

(1)在对应的文件中上传jenkins war包:java/jenkins.war

wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war

(2)启动jenkins[记得当前机器安装了jdk/jre,不然运行不了]

后台运行并暴露8080端口nohupjava -jar jenkins.war --httpPort=8080 &查看日志tail-f nohup.out

(3)win浏览器访问w2的ip 192.168.0.23:8080

查看密码cat/root/.jenkins/secrets/initialAdminPassword

(4)安装推荐的插件

(5)创建一个用户

username:yangpingpassword:yangping

(6)安装配置git,maven【在jenkins上使用centos的java,git,maven等】[系统管理]->[全局工具配置]->[Maven、JDK、Git等]

配置好后点击应用并保存。

jenkins配置从github上拉取代码并用maven进行构建

1.新建pipeline任务

在流水线中输入任务执行脚本【从git拉取代码后开始maven构建项目】

然后保存和立即构建,同时可以查看Console Output

来到w2节点:ls/root/.jenkins/workspace/springboot-demo

至此,我们已经可以通过在jenkins上手动构建的方式,拿到github上的代码,并且用maven进行构建。

git push触发jenkins自动构建

当用户进行git commit/push提交代码到github时,能够通知jenkins自动构建

注意:jenkins的ip一定要是github能够访问到的地址

(1)在github上配置jenkins的webhook地址http://121.40.56.193:8080/springboot-demo

(2)生成Personal access tokens

Jenkins访问github需要授权,所以在github上生成token交给jenkins使用,即 Personal access tokens github的Settings[个人信息右上角]-->Developer settings-->Personal access tokens-->Generate new token,最后保存好该token,比如:72f048b514e95d6fe36f86d84374f2dcce402b43

(3)jenkins安装插件

01 安装githubplugin插件:[系统管理]->[插件管理]->[可选插件]02 安装gitlab插件和gitlabhook插件:[系统管理]->[插件管理]->[可选插件]

(4)配置GitHub Server

[系统管理]->[系统配置]->[找到github服务器]->[添加github服务器]然后按照下面图片步骤进行操作

然后进行测试,最后点击最下面的保存

build镜像并push镜像到仓库

经过前面的步骤,我们已经可以获取到代码,并且用maven进行构建了,最终拿到一个target/xxx.jar。此时我们可以把jar包制作成Image并上传到阿里云仓库。

(1)准备一个文件,名称为springboot-demo-build-image.sh

新建一个scripts目录mkdir/root/.jenkins/workspace/scripts/vi/root/.jenkins/workspace/scripts/springboot-demo-build-image.sh

(2)编写springboot-demo-build-image.sh文件

进入到springboot-demo目录cd../springboot-demo编写Dockerfile文件cat< DockerfileFROMopenjdk:8-jre-alpineCOPYtarget/springboot-0.0.1-SNAPSHOT.jar /springboot-demo.jarENTRYPOINT["java","-jar","/springboot-demo.jar"]EOFecho"Dockerfile created successfully!"基于指定目录下的Dockerfile构建镜像dockerbuild -t registry.cn-hangzhou.aliyuncs.com/yp2018/springboot-demo:v1.0 .push镜像,这边需要阿里云镜像仓库登录,在w2上登录dockerpush registry.cn-hangzhou.aliyuncs.com/yp2018/springboot-demo:v1.0

(4)增加pipeline脚本

node{defmvnHome
   stage(Preparation) {githttps://github.com/yp1527/springboot-demo.git}
   
   stage(Maven Build) {sh"mvn clean package"}
   
   stage(Build Image) {sh"/root/.jenkins/workspace/scripts/springboot-demo-build-image.sh"}
}

(5)注意

01 文件权限/root/.jenkins/workspace/springboot-demo@tmp/durable-7dbf7e73/script.sh:line 1: /root/.jenkins/workspace/scripts/springboot-demo-build-image.sh: Permission denied解决chmod+x /root/.jenkins/workspace/scripts/springboot-demo-build-image.sh02 docker没有运行Cannotconnect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?解决systemctlstart dockersystemctlenable docker03 push权限dockerlogin --username=18224401527 registry.cn-hangzhou.aliyuncs.com

Kubernetes拉取镜像运行

经过前面的步骤,现在已经能够把镜像push到镜像仓库了,接下来就是k8s拉取镜像并且运行在集群中。根据前面的经验,肯定再创建一个stage,然后运行sh脚本,脚本中执行内容,包括yaml文件。【因为springboot项目要通过ingress进行外面访问所以要保证ingress-conttroller运行】

(1)编写springboot-demo.yaml文件【在/root/.jenkins/workspace/scripts/目录下创建springboot-demo.yaml

以Deployment部署PodapiVersion:apps/v1kind:Deploymentmetadata:name:springboot-demospec:selector:matchLabels:app:springboot-demoreplicas:1template:metadata:labels:app:springboot-demospec:containers:-name:springboot-demoimage:registry.cn-hangzhou.aliyuncs.com/yp2018/springboot-demo:v1.0ports:-containerPort:8080---创建Pod的ServiceapiVersion:v1kind:Servicemetadata:name:springboot-demospec:ports:-port:80protocol:TCPtargetPort:8080selector:app:springboot-demo---创建Ingress,定义访问规则apiVersion:extensions/v1beta1kind:Ingressmetadata:name:springboot-demospec:rules:-host:yp.k8s.demohttp:paths:-path:/backend:serviceName:springboot-demoservicePort:80

(2)编写k8s-deploy-springboot-demo.sh文件【vi/root/.jenkins/workspace/scripts/k8s-deploy-springboot-demo.sh

删除服务kubectldelete-f/root/.jenkins/workspace/scripts/springboot-demo.yaml部署服务kubectl apply -f/root/.jenkins/workspace/scripts/springboot-demo.yaml打印echo"k8s deploy success!"

(3)编写pipeline脚本

node{defmvnHome
   stage(Preparation) {githttps://github.com/yp1527/springboot-demo.git}
   
   stage(Maven Build) {sh"mvn clean package"}
   
   stage(Build Image) {sh"/root/.jenkins/workspace/scripts/springboot-demo-build-image.sh"}

  stage(K8S Deploy) {sh"/root/.jenkins/workspace/scripts/k8s-deploy-springboot-demo.sh"}
}

注意:在k8s集群中的woerk节点上如果不能执行 kubectl 命令,是因为没有权限,可以把master节点中的.kube目录下的config内容复制到worker节点同样的地方就可以了。

给k8s-deploy-springboot-demo.sh执行权限chmod +x/root/.jenkins/workspace/scripts/k8s-deploy-springboot-demo.sh

Push代码到git进行测试,验证Jenkins是否会拉取代码进行maven构建代码,然后根据Jar包进行生成Image并上传到阿里云仓库,最后k8s集群从阿里云仓库拉取进行进行部署运行。

至此一个项目的CICD过程搭建完成。

概述

JENKINS作为一款持续集成工具,还是比较简单易用的。

开发过程中,我们主要使用jenkins作为自动化编译工具和自动备份工具。

本文主要介绍一种常见场景的设置方法,即jenkins定时任务的设置方法。

环境

centos:CentOS release 7.0 (Final)或以上版本

Jenkins 2.332.2

定时任务配置

代码库使用本地gitlab管理,在jenkins中原本有一个任务,可以一键备份gitlab数据并归档管理。

该任务需要每周手动点击一次。但还是不够懒。

真的懒应该把这一次点击也省略掉。

打开任务的配置项,Dashboard -> Project Name -> 配置 -> 构建触发器 -> Build periodically,勾选Build periodically。

在输入框中输入定时任务配置项。

TZ=Asia/Shanghaieach saturday morning, run the jobH0 * * 6

上面的配置代表,在上海时间的每个星期六,0点H分启动1次定时任务,见截图。

配置说明

看了上面的配置方法,是不是觉得很熟悉,和linux系统的crontab定时任务很类似。

官方的使用说明也说了,和cron的规则很类似,但又有小小的不同。

其中最特别的一点,‘H‘代表’hash‘。

比如H 0 * * 6的配置表示,任务会在0点的0-59分随机选择分钟数来执行任务,这样的好处就是多个相似任务可以在执行时间上负载均衡,降低任务同时执行的服务器压力。

官方说明如下。


                                

jenkins定时任务

  • 下一篇『高级篇』docker之gitlab和jenkins-CICD流程(43)

    『高级篇』docker之gitlab和jenkins-CICD流程(43)

    上节已经安装好了gitlab和jenkins,这次就把CICD的流程串起来切身的体验下CICD。目的就是在gitlab提交代码。触发一系列的流程,最后可以看到新