kubernetes使用jenkins Pipeline 部署Nginx
发布日期:2022-02-28 11:05:58 浏览次数:6 分类:技术文章

本文共 4741 字,大约阅读时间需要 15 分钟。

环境需求

  • kubernetes 未安装参考
  • jenkins
  • github/gitee/gitlab 静态页面
  • 镜像仓库(我使用的 )
    如果你未准备好的以上环境,点击链接参考文章进行安装。

安装 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.reporpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.keyyum 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.rpmrpm -ivh jenkins-2.7.3-1.1.noarch.rpm

{

{< /tab >}}
{
{< /tabs >}}

安装 Jenkins 插件

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

cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
修改下方地址 然后提交

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

安装git和pipeline插件

cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控

创建 jenkins Pipeline

添加Pipeline job

cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
创建job完成后,配置Pipeline script,点击Pipeline语法,来自动生成我们需要的配置。
cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
如下图,我们Git方式,配置Git仓库地址,再添加认证相关。
cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
分别填写github/gitee的账号和密码然后点击添加
cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
添加完成后,在凭据中,选中刚添加的,这样我们就可以生成Pipeline脚本了。点击下方生成流水线脚本,然后复制方框内的内容。
cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控

编写 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 << EOFFROM wenlongxue/nginx## 设置工作目录WORKDIR /usr/local/nginx/htmlRUN rm -rf /usr/local/nginx/html/* ADD waynex/waynex.tar /usr/local/nginx/html/## 启动nginxCMD ["nginx","-g","daemon off;"]EOFdocker build -t waynex:${imageTag} .docker logindocker tag waynex:${imageTag} $REPOSITORYdocker push $REPOSITORY''' } // 部署到k8s主机 stage('部署到k8s') {
sh '''REPOSITORY=wenlongxue/waynex:${imageTag}cat > nginx.yaml << EOFapiVersion: apps/v1 #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本kind: Deployment #该配置的类型,我们使用的是 Deploymentmetadata: #译名为元数据,即 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: v1kind: Servicemetadata: #译名为元数据,即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/LoaderBalancerEOFsudo kubectl apply -f nginx.yaml''' }}

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

cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
然后保存配置。

发布测试

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

cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
查看构建成功后的图形构建过程:
cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
通过浏览器来访问项目:
至此部署完成

转载地址:https://blog.csdn.net/weixin_47430049/article/details/117777596 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:kubernetes部署一个应用程序
下一篇:AWS EC2 实例 SSH 无法登录故障

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月06日 22时51分07秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章