文章原文

环境需求

安装 jenkins

我这边的jenkins是将jenkins 安装在了k8s的宿主机中,并没有用容器运行。

安装JDK

yum install -y java

安装jenkins

{{< tabs 方法1 方法2 >}}

{{< tab >}}

方法1 添加Jenkins库到yum库,Jenkins将从这里下载安装。

wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
yum install -y jenkins

{{< /tab >}}

{{< tab >}}

方法2 如果不能安装就到官网下载jenkis的rmp包,官网地址(http://pkg.jenkins-ci.org/redhat-stable/)

wget http://pkg.jenkins-ci.org/redhat-stable/jenkins-2.7.3-1.1.noarch.rpm
rpm -ivh jenkins-2.7.3-1.1.noarch.rpm

{{< /tab >}}

{{< /tabs >}}

安装 Jenkins 插件

安装完jenkins,设置完密码,安装完默认插件以后,我们需要安装 Pipeline 需要的插件。







修改下方地址 然后提交

# jenkins插件清华大学镜像地址
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
http://mirror.xmission.com/jenkins/updates/update-center.json

安装git和pipeline插件

创建 jenkins Pipeline

添加Pipeline job



创建job完成后,配置Pipeline script,点击Pipeline语法,来自动生成我们需要的配置。





如下图,我们Git方式,配置Git仓库地址,再添加认证相关。



分别填写github/gitee的账号和密码然后点击添加



添加完成后,在凭据中,选中刚添加的,这样我们就可以生成Pipeline脚本了。点击下方生成流水线脚本,然后复制方框内的内容。

编写 Pipeline 脚本

编写我们所需要的Pipeline脚本如下,将其粘贴到script的拉取代码模块中,并修改分支master为${branch},其他模块内容自行编写。

文章原文

node {
stage('拉取代码') {
//拉取代码
git credentialsId: 'b34b0b78-e99f-4aa0-a616-xxxxxx', url: 'https://gitee.com/xxx/xxxxx.git'
//将上次打包的代删除掉,并将拉取到的新代码代码打包
sh 'rm -rf *.tar && cd waynex && tar -cvf waynex.tar ./*'
script {
//获取comment id
env.imageTag = sh (script: 'git rev-parse --short HEAD ${GIT_COMMIT}', returnStdout: true).trim()
}
}
// 项目打包到镜像并推送到镜像仓库
stage('构建推送镜像') {
sh '''
REPOSITORY=wenlongxue/waynex:${imageTag}
cat > Dockerfile << EOF
FROM wenlongxue/nginx ## 设置工作目录
WORKDIR /usr/local/nginx/html RUN rm -rf /usr/local/nginx/html/*
ADD waynex/waynex.tar /usr/local/nginx/html/ ## 启动nginx
CMD ["nginx","-g","daemon off;"]
EOF docker build -t waynex:${imageTag} .
docker login
docker tag waynex:${imageTag} $REPOSITORY
docker push $REPOSITORY
'''
}
// 部署到k8s主机
stage('部署到k8s')
{
sh '''
REPOSITORY=wenlongxue/waynex:${imageTag}
cat > nginx.yaml << EOF
apiVersion: apps/v1 #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
kind: Deployment #该配置的类型,我们使用的是 Deployment
metadata: #译名为元数据,即 Deployment 的一些基本属性和信息
name: nginx-deployment #Deployment 的名称
labels: #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解
app: nginx #为该Deployment设置key为app,value为nginx的标签
spec: #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用
replicas: 1 #使用该Deployment创建一个应用程序实例
selector: #标签选择器,与上面的标签共同作用,目前不需要理解
matchLabels: #选择包含标签app:nginx的资源
app: nginx
minReadySeconds: 1
progressDeadlineSeconds: 60
revisionHistoryLimit: 2
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template: #这是选择或创建的Pod的模板
metadata: #Pod的元数据
labels: #Pod的标签,上面的selector即选择包含标签app:nginx的Pod
app: nginx
spec: #期望Pod实现的功能(即在pod中部署)
containers: #生成container,与docker中的container是同一种
- name: nginx #container的名称
image: \$REPOSITORY #使用之前推送的镜像
imagePullPolicy: Always #总是拉取最新的。默认为,本地有则使用本地镜像,不拉取
ports:
- containerPort: 80
resources:
requests:
memory: "600Mi"
cpu: "250m"
limits:
memory: "600Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 10 #pod启动10秒执行第一次检查
periodSeconds: 5 #第一次检查后每隔5秒检查一次
---
apiVersion: v1
kind: Service
metadata: #译名为元数据,即Deployment的一些基本属性和信息
name: nginx-service #Service 的名称
labels: #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组
app: nginx #为该Deployment设置key为app,value为nginx的标签
spec: #这是关于该 Service 的定义,描述了 Service 如何选择 Pod,如何被访问
selector: #标签选择器
app: nginx #选择包含标签 app:nginx 的 Pod
ports:
- name: nginx-port #端口的名字
protocol: TCP #协议类型 TCP/UDP
port: 80 #集群内的其他容器组可通过 80 端口访问 Service
nodePort: 30081 #通过任意节点的 30080 端口访问 Service
targetPort: 80 #将请求转发到匹配 Pod 的 80 端口
type: NodePort #Serive的类型,ClusterIP/NodePort/LoaderBalancer
EOF
sudo kubectl apply -f nginx.yaml
'''
}
}

在Pipeline脚本里面我们指定了一个branch参数,所以我们需要传递一个参数变量,这里我们选择参数化构建,默认值为master分支。



然后保存配置。

发布测试

回到主界面,我们开始构建任务:



查看构建成功后的图形构建过程:



通过浏览器来访问项目:http://你的IP:30080/

至此部署完成

文章原文

kubernetes使用jenkins Pipeline 部署Nginx的更多相关文章

  1. Kubernetes DevOps: Jenkins Pipeline (流水线)

    要实现在 Jenkins 中的构建工作,可以有多种方式,我们这里采用比较常用的 Pipeline 这种方式.Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于 ...

  2. Jenkins Pipeline 部署 SpringBoot 应用

    一. 安装依赖包 yum install -y wget yum install -y gcc-c++ yum install -y zlib-devel perl-ExtUtils-MakeMake ...

  3. jenkins pipeline 部署

    一.git 版本控制结合jenkins 发布 sh-4.2$ git branch sh-4.2$ git chekout master sh-4.2$ git tag v1.1 sh-4.2$ gi ...

  4. Kubernetes笔记(三):Gitlab+Jenkins Pipeline+Docker+k8s+Helm自动化部署实践(干货分享!)

    通过前面两篇文章,我们已经有了一个"嗷嗷待哺"的K8s集群环境,也对相关的概念与组件有了一个基本了解(前期对概念有个印象即可,因为只有实践了才能对其有深入理解,所谓"纸上 ...

  5. 实战项目部署应用到kubernetes流程(jenkins+docker+k8s)

    说明 通过jenkins构建java应用程序发布到k8s集群中 本文已一个大数据的java项目来演示构建部署过程 支持发布和回滚 支持一套模板应用不同项目 k8s基础准备 创建项目名称空间 [root ...

  6. 008.Kubernetes二进制部署Nginx实现高可用

    一 Nginx代理实现kube-apiserver高可用 1.1 Nginx实现高可用 基于 nginx 代理的 kube-apiserver 高可用方案. 控制节点的 kube-controller ...

  7. kubernetes部署nginx/tomcat

    kubernetes集群已经部署好了,需要的话可以参考之前的文章https://www.cnblogs.com/winter1519/p/10015420.html [root@master tomc ...

  8. k8s + docker + Jenkins使用Pipeline部署SpringBoot项目时Jenkins错误集锦

    背景 系统版本:CentOS7 Jenkins版本:2.222.1 maven版本:apache-maven-3.6.3 Java版本:jdk1.8.0_231 Git版本:1.8.3.1 docke ...

  9. [持续交付实践] Jenkins Pipeline 高可用设计方法

    前言 这篇写好一段时间了,一直也没发布上来,今天稍微整理下了交下作业,部分内容偷懒引用了一些别人的内容.使用Jenkins做持续集成/持续交付,当业务达到一定规模的时候,Jenkins本身就很容易成为 ...

随机推荐

  1. YGC问题排查

    在高并发下, Java程序的GC问题属于很典型的一类问题,带来的影响往往会被进一步放大. 不管是 「GC频率过快」还是「GC耗时太长」,由于GC期间都存在Stop The World问题,因此很容易导 ...

  2. SPRING.NET FRAMEWORK 3.0 GA啦

    THE SPRING.NET FRAMEWORK http://www.springframework.net/ 1. INTRODUCTION Spring.NET contains: A full ...

  3. leetcode 有效三角形的个数

    题目描述: 平明伞兵解法: 既然要求满足三角形要求的三边,简单来说,就是最短两边之和大于第三边,所以,第一步Arrays.sort().先排序,然后直接伞兵暴力法,三重循环.当然最后肯定是能跑出来的, ...

  4. webRTC的标准与发展

    Web实时通信(WebRTC)是标准,协议和JavaScript API的集合,两者的组合可实现浏览器(对等)之间的对等音频,视频和数据共享.WebRTC无需依赖第三方插件或专有软件,而是将实时通信转 ...

  5. SpringCloud升级之路2020.0.x版-8.理解 NamedContextFactory

    本系列为之前系列的整理重启版,随着项目的发展以及项目中的使用,之前系列里面很多东西发生了变化,并且还有一些东西之前系列并没有提到,所以重启这个系列重新整理下,欢迎各位留言交流,谢谢!~ spring- ...

  6. netty系列之:基于流的数据传输

    目录 简介 package和byte 手动组合 Byte的转换类 ReplayingDecoder 总结 简介 我们知道由两种数据的传输方式,分别是字符流和字节流,字符流的意思是传输的对象就是字符串, ...

  7. Python 机器学习实战 —— 无监督学习(下)

    前言 在上篇< Python 机器学习实战 -- 无监督学习(上)>介绍了数据集变换中最常见的 PCA 主成分分析.NMF 非负矩阵分解等无监督模型,举例说明使用使用非监督模型对多维度特征 ...

  8. Spring Cloud Alibaba - Spring Cloud Stream 整合 RocketMQ

    Spring Cloud Stream 简介 在微服务的开发过程中,可能会经常用到消息中间件,通过消息中间件在服务与服务之间传递消息,不管你使用的是哪款消息中间件,比如RabbitMQ.Kafka和R ...

  9. 第6篇-Java方法新栈帧的创建

    在 第2篇-JVM虚拟机这样来调用Java主类的main()方法 介绍JavaCalls::call_helper()函数的实现时提到过如下一句代码: address entry_point = me ...

  10. Java和Groovy脚本互相调用实例

    本实例是GODU动态脚本的一个技术简化版,演示了java调groovy,groovy又调java的运行过程. 测试用例: package com.boco.godu.integration; impo ...