K8S学习之基础五十四:jenkins新建测试流水线

news2025/4/1 13:44:31

jenkins新建测试流水线

新建任务
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

node('testak') {
    stage('第1步:从gitee上下载源代码') {
        git url: "https://gitee.com/akang007/jenkins-sample"
        script {
            build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
        }
    }
    stage('第2步:基于dockerfile文件制作镜像') {
        sh "docker build -t 192.168.40.62/jenkins-demo/jenkins-demo:${build_tag} ."
    }
    stage('第3步:把镜像上传到harbor私有仓库') {
        withCredentials([usernamePassword(credentialsId: 'dockerharbor', passwordVariable: 'dockerHubPassword', usernameVariable: 'dockerHubUser')]) {
            sh "docker login 172.16.80.140 -u ${dockerHubUser} -p ${dockerHubPassword}"
            sh "docker push 172.16.80.140/jenkins-demo/jenkins-demo:${build_tag}"
        }
    }
    stage('第4步:把pod部署到开发环境') {
		sh "sed -i 's/<BUILD_TAG>/${build_tag}/' k8s-dev-harbor.yaml"
        sh "sed -i 's/<BRANCH_NAME>/${env.BRANCH_NAME}/' k8s-dev-harbor.yaml"
//        sh "bash running-devlopment.sh"
        sh "kubectl apply -f k8s-dev-harbor.yaml  --validate=false"
	}	
	stage('第5步:把pod部署到测试环境') {	
		def userInput = input(
            id: 'userInput',

            message: '确定部署到测试环境吗?输入yes确定',
            parameters: [
                [
                    $class: 'ChoiceParameterDefinition',
                    choices: "YES\nNO",
                    name: 'Env'
                ]
            ]
        )
        echo "This is a deploy step to ${userInput}"
        if (userInput == "YES") {
            sh "sed -i 's/<BUILD_TAG>/${build_tag}/' k8s-qa-harbor.yaml"
            sh "sed -i 's/<BRANCH_NAME>/${env.BRANCH_NAME}/' k8s-qa-harbor.yaml"
//            sh "bash running-qa.sh"
            sh "kubectl apply -f k8s-qa-harbor.yaml --validate=false"
            sh "sleep 6"
            sh "kubectl get pods -n qatest"
            sh "cd /home/jenkins/agent/workspace/jenkins-harbor"
            sh "/root/Python-3.12.5/python qatest.py"
        } else {
            //exit
        }
    }
	stage('第6步:pod部署到生产环境') {	
		def userInput = input(

            id: 'userInput',
            message: '确定部署到生产环境吗?输入yes确定',
            parameters: [
                [
                    $class: 'ChoiceParameterDefinition',
                    choices: "YES\nNO",
                    name: 'Env'
                ]
            ]
        )
        echo "This is a deploy step to ${userInput}"
        if (userInput == "YES") {
            sh "sed -i 's/<BUILD_TAG>/${build_tag}/' k8s-prod-harbor.yaml"
            sh "sed -i 's/<BRANCH_NAME>/${env.BRANCH_NAME}/' k8s-prod-harbor.yaml"
//            sh "bash running-production.sh"
            sh "cat k8s-prod-harbor.yaml"
            sh "kubectl apply -f k8s-prod-harbor.yaml --record --validate=false"
            sh "cd /home/jenkins/agent/workspace/jenkins-harbor"
            sh "/root/Python-3.12.5/python smtp.py"
        }
    }
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Skip to content
[Jenkins]Jenkins
查找 (⌘+K)
1
2
admin

注销
Dashboard
jenkins-harbor
#11
状态
变更历史
Console Output
View as plain text
编辑构建信息
删除构建 ‘#11’
Timings
Git Build Data
回放
流水线步骤
Workspaces
上一次构建
Console Output
Started by user admin
[Pipeline] Start of Pipeline
[Pipeline] node
Agent test-p2tjd is provisioned from template test
---
apiVersion: "v1"
kind: "Pod"
metadata:
  annotations:
    kubernetes.jenkins.io/last-refresh: "1742977713779"
  labels:
    jenkins: "slave"
    jenkins/label-digest: "0d1a27dd84b68b7896a5df6f824a36e1721850f6"
    jenkins/label: "testak"
    kubernetes.jenkins.io/controller: "ttp___jenkins-service_jenkins-k8s_svc_cluster_local_8080x"
  name: "test-p2tjd"
  namespace: "jenkins-k8s"
spec:
  containers:
  - env:
    - name: "JENKINS_SECRET"
      value: "********"
    - name: "JENKINS_AGENT_NAME"
      value: "test-p2tjd"
    - name: "REMOTING_OPTS"
      value: "-noReconnectAfter 1d"
    - name: "JENKINS_NAME"
      value: "test-p2tjd"
    - name: "JENKINS_AGENT_WORKDIR"
      value: "/home/jenkins/agent"
    - name: "JENKINS_URL"
      value: "http://jenkins-service.jenkins-k8s.svc.cluster.local:8080/"
    image: "172.16.80.140/jenkins/jenkins.agent:v2"
    imagePullPolicy: "IfNotPresent"
    name: "jnlp"
    resources: {}
    securityContext:
      privileged: true
    tty: true
    volumeMounts:
    - mountPath: "/home/jenkins/.kube"
      name: "volume-1"
      readOnly: false
    - mountPath: "/etc/docker/daemon.json"
      name: "volume-4"
      readOnly: false
    - mountPath: "/usr/bin/kubectl"
      name: "volume-3"
      readOnly: false
    - mountPath: "/usr/bin/docker"
      name: "volume-2"
      readOnly: false
    - mountPath: "/run/docker.sock"
      name: "volume-0"
      readOnly: false
    - mountPath: "/home/jenkins/agent"
      name: "workspace-volume"
      readOnly: false
    workingDir: "/home/jenkins/agent"
  hostNetwork: false
  nodeSelector:
    kubernetes.io/os: "linux"
  restartPolicy: "Never"
  serviceAccountName: "jenkins-k8s-sa"
  volumes:
  - hostPath:
      path: "/run/docker.sock"
    name: "volume-0"
  - hostPath:
      path: "/usr/bin/docker"
    name: "volume-2"
  - hostPath:
      path: "/root/.kube"
    name: "volume-1"
  - emptyDir:
      medium: ""
    name: "workspace-volume"
  - hostPath:
      path: "/etc/docker/daemon.json"
    name: "volume-4"
  - hostPath:
      path: "/usr/bin/kubectl"
    name: "volume-3"

Running on test-p2tjd in /home/jenkins/agent/workspace/jenkins-harbor
[Pipeline] {
[Pipeline] stage
[Pipeline] { (第1步:从gitee上下载源代码)
[Pipeline] git
The recommended git tool is: NONE
No credentials specified
Cloning the remote Git repository
Cloning repository https://gitee.com/akang007/jenkins-sample
 > git init /home/jenkins/agent/workspace/jenkins-harbor # timeout=10
Fetching upstream changes from https://gitee.com/akang007/jenkins-sample
 > git --version # timeout=10
 > git --version # 'git version 2.39.5'
 > git fetch --tags --force --progress -- https://gitee.com/akang007/jenkins-sample +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git config remote.origin.url https://gitee.com/akang007/jenkins-sample # timeout=10
 > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
Avoid second fetch
Checking out Revision df755ee1bbcf162fbfb6cadf8bb008039d6ccbb6 (refs/remotes/origin/master)
Commit message: "update smtp.py."
 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
 > git config core.sparsecheckout # timeout=10
 > git checkout -f df755ee1bbcf162fbfb6cadf8bb008039d6ccbb6 # timeout=10
 > git branch -a -v --no-abbrev # timeout=10
 > git checkout -b master df755ee1bbcf162fbfb6cadf8bb008039d6ccbb6 # timeout=10
 > git rev-list --no-walk df755ee1bbcf162fbfb6cadf8bb008039d6ccbb6 # timeout=10
[Pipeline] script
[Pipeline] {
[Pipeline] sh
+ git rev-parse --short HEAD
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (第2步:基于dockerfile文件制作镜像)
[Pipeline] sh
+ docker build -t 172.16.80.140/jenkins-demo/jenkins-demo:df755ee .
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
            Install the buildx component to build images with BuildKit:
            https://docs.docker.com/go/buildx/

Sending build context to Docker daemon  245.2kB

Step 1/5 : FROM golang:1.10.4-alpine
 ---> bd36346540f3
Step 2/5 : ADD . /go/src/app
 ---> ffc6aa5f3db2
Step 3/5 : WORKDIR /go/src/app
 ---> Running in 9823c707df6a
 ---> Removed intermediate container 9823c707df6a
 ---> 8de16f4e2759
Step 4/5 : RUN  go build -v -o /go/src/app/jenkins-app
 ---> Running in 8383ac606d62
[91mapp
[0m ---> Removed intermediate container 8383ac606d62
 ---> c56dc76e52d1
Step 5/5 : CMD ["./jenkins-app"]
 ---> Running in a9cfa67f329d
 ---> Removed intermediate container a9cfa67f329d
 ---> de8f85fff5b3
Successfully built de8f85fff5b3
Successfully tagged 172.16.80.140/jenkins-demo/jenkins-demo:df755ee
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (第3步:把镜像上传到harbor私有仓库)
[Pipeline] withCredentials
Masking supported pattern matches of $dockerHubPassword
[Pipeline] {
[Pipeline] sh
Warning: A secret was passed to "sh" using Groovy String interpolation, which is insecure.
		 Affected argument(s) used the following variable(s): [dockerHubPassword]
		 See https://jenkins.io/redirect/groovy-string-interpolation for details.
+ docker login 172.16.80.140 -u admin -p ****
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[Pipeline] sh
+ docker push 172.16.80.140/jenkins-demo/jenkins-demo:df755ee
The push refers to repository [172.16.80.140/jenkins-demo/jenkins-demo]
4a8fd9bc91b9: Preparing
67781d6fba74: Preparing
ac1c7fa88ed0: Preparing
cc5fec2c1edc: Preparing
93448d8c2605: Preparing
c54f8a17910a: Preparing
df64d3292fd6: Preparing
c54f8a17910a: Waiting
df64d3292fd6: Waiting
93448d8c2605: Layer already exists
c54f8a17910a: Layer already exists
ac1c7fa88ed0: Layer already exists
cc5fec2c1edc: Layer already exists
df64d3292fd6: Layer already exists
67781d6fba74: Pushed
4a8fd9bc91b9: Pushed
df755ee: digest: sha256:6c80d0f4d2c2bb82ebb3286b874c21b1917ef381e348bcc600b05d5e7dbf899a size: 1785
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (第4步:把pod部署到开发环境)
[Pipeline] sh
+ sed -i s/<BUILD_TAG>/df755ee/ k8s-dev-harbor.yaml
[Pipeline] sh
+ sed -i s/<BRANCH_NAME>/null/ k8s-dev-harbor.yaml
[Pipeline] sh
+ kubectl apply -f k8s-dev-harbor.yaml --validate=false
deployment.apps/jenkins-demo created
service/demo created
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (第5步:把pod部署到测试环境)
[Pipeline] input
Input requested
Approved by admin
[Pipeline] echo
This is a deploy step to YES
[Pipeline] sh
+ sed -i s/<BUILD_TAG>/df755ee/ k8s-qa-harbor.yaml
[Pipeline] sh
+ sed -i s/<BRANCH_NAME>/null/ k8s-qa-harbor.yaml
[Pipeline] sh
+ kubectl apply -f k8s-qa-harbor.yaml --validate=false
deployment.apps/jenkins-demo created
service/demo created
[Pipeline] sh
+ sleep 6
[Pipeline] sh
+ kubectl get pods -n qatest
NAME                            READY   STATUS    RESTARTS   AGE
jenkins-demo-56fd75f4db-5nbst   1/1     Running   0          8s
[Pipeline] sh
+ cd /home/jenkins/agent/workspace/jenkins-harbor
[Pipeline] sh
+ /root/Python-3.12.5/python qatest.py
邮件发送成功!
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (第6步:pod部署到生产环境)
[Pipeline] input
Input requested
Approved by admin
[Pipeline] echo
This is a deploy step to YES
[Pipeline] sh
+ sed -i s/<BUILD_TAG>/df755ee/ k8s-prod-harbor.yaml
[Pipeline] sh
+ sed -i s/<BRANCH_NAME>/null/ k8s-prod-harbor.yaml
[Pipeline] sh
+ cat k8s-prod-harbor.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins-demo
  namespace: production
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins-demo
  template:
    metadata:
      labels:
        app: jenkins-demo
    spec:
      containers:
      - image: 172.16.80.140/jenkins-demo/jenkins-demo:df755ee
        imagePullPolicy: IfNotPresent
        name: jenkins-demo
        env:
        - name: branch
          value: null
---
apiVersion: v1
kind: Service
metadata:
   name: jenkins-demo
   namespace: production
spec:
   selector:
     app: jenkins-demo
   type: NodePort
   ports:
   - port: 18888
     targetPort: 18888
     nodePort: 31890
[Pipeline] sh
+ kubectl apply -f k8s-prod-harbor.yaml --record --validate=false
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/jenkins-demo created
service/jenkins-demo created
[Pipeline] sh
+ cd /home/jenkins/agent/workspace/jenkins-harbor
[Pipeline] sh
+ /root/Python-3.12.5/python smtp.py
邮件发送成功!
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Jenkins 中文社区
REST API
Jenkins 2.426.3

开发、测试、生产三个环境都部署了pod和svc,均可以通过访问ip+port的方式访问
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
收到邮件
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2322936.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS NEXT(九) :图形渲染体系

HarmonyOS NEXT&#xff08;九&#xff09; &#xff1a;图形渲染体系 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 文章目录 HarmonyOS NEXT&#xff0…

SQLAlchemy关键词搜索技术深度解析:从基础过滤到全文检索

在数据驱动的应用开发中&#xff0c;基于关键词的模糊查询是常见的业务需求。SQLAlchemy作为Python生态中最流行的ORM框架&#xff0c;提供了多种实现关键词搜索的技术方案。本文将从性能、适用场景和技术复杂度三个维度&#xff0c;系统对比分析SQLAlchemy中关键词搜索的最佳实…

ES数据过多,索引拆分

公司企微聊天数据存储在 ES 中&#xff0c;虽然按照企业分储在不同的ES 索引中&#xff0c;但某些常用的企微主体使用量还是很大。4年中一个索引存储数据已经达到46多亿条数据&#xff0c;占用存储3.1tb, ES 配置 由于多一个副本&#xff0c;存储得翻倍&#xff0c;成本考虑…

uni-app自动升级功能

效果图 一、VUE login.vue <template><view><view class"uni-common-mt"><view class"uni-flex uni-column"><view class"flex-item flex-item-V"><view class"logo"><image src"/st…

使用AI一步一步实现若依(26)

功能26&#xff1a;新增一个新员工培训页面 功能25&#xff1a;角色管理 功能24&#xff1a;菜单管理 功能23&#xff1a;从后端获取路由/菜单数据 功能22&#xff1a;用户管理 功能21&#xff1a;使用axios发送请求 功能20&#xff1a;使用分页插件 功能19&#xff1a;集成My…

逻辑回归(Logistic Regression)模型的概率预测函数

以二分类问题为例&#xff0c;常见的损失函数有 负对数似然损失(neg log-likelihood loss)&#xff0c;交叉熵损失(cross entropy loss)&#xff0c;deviance loss指数损失(exponential loss)。 前三者虽然名字不同&#xff0c;但却具有相同的表达形式。此外&#xff0c;neg …

【零基础学python】python高级语法(四)

接续上面的系列文章&#xff1a; 【零基础学python】python基础语法&#xff08;一&#xff09;-CSDN博客 【零基础学python】python基础语法&#xff08;二&#xff09;-CSDN博客 【零基础学python】python高级语法&#xff08;三&#xff09;-CSDN博客 目录 2&#xff0c…

HarmonyOS 之 @Require 装饰器自学指南

在 HarmonyOS 应用开发工作中&#xff0c;我频繁碰到组件初始化传参校验的难题。在复杂的组件嵌套里&#xff0c;要是无法确保必要参数在构造时准确传入&#xff0c;就极易引发运行时错误&#xff0c;而且排查起来费时费力。一次偶然的机会&#xff0c;我接触到了 Require 装饰…

基于CNN的FashionMNIST数据集识别6——ResNet模型

前言 之前我们在cnn已经搞过VGG和GoogleNet模型了&#xff0c;这两种较深的模型出现了一些问题&#xff1a; 梯度传播问题 在反向传播过程中&#xff0c;梯度通过链式法则逐层传递。对于包含 L 层的网络&#xff0c;第 l 层的梯度计算为&#xff1a; 其中 a(k) 表示第 k层的…

0323-B树、B+树

多叉树---->B树&#xff08;磁盘&#xff09;、B树 磁盘由多个盘片组成&#xff0c;每个盘片分为多个磁道和扇区。数据存储在这些扇区中&#xff0c;扇区之间通过指针链接&#xff0c;形成链式结构。 内存由连续的存储单元组成&#xff0c;每个单元有唯一地址&#xff0c;数…

【工作记录】F12查看接口信息及postman中使用

可参考 详细教程&#xff1a;如何从前端查看调用接口、传参及返回结果&#xff08;附带图片案例&#xff09;_f12查看接口及参数-CSDN博客 1、接口信息 接口基础知识2&#xff1a;http通信的组成_接口请求信息包括-CSDN博客 HTTP类型接口之请求&响应详解 - 三叔测试笔记…

2024年认证杯SPSSPRO杯数学建模B题(第二阶段)神经外科手术的定位与导航全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 B题 神经外科手术的定位与导航 原题再现&#xff1a; 人的大脑结构非常复杂&#xff0c;内部交织密布着神经和血管&#xff0c;所以在大脑内做手术具有非常高的精细和复杂程度。例如神经外科的肿瘤切除手术或血肿清除手术&#xff0c;通常需要…

Android 12系统源码_系统启动(二)Zygote进程

前言 Zygote&#xff08;意为“受精卵”&#xff09;是 Android 系统中的一个核心进程&#xff0c;负责 孵化&#xff08;fork&#xff09;应用进程&#xff0c;以优化应用启动速度和内存占用。它是 Android 系统启动后第一个由 init 进程启动的 Java 进程&#xff0c;后续所有…

MOSN(Modular Open Smart Network)-05-MOSN 平滑升级原理解析

前言 大家好&#xff0c;我是老马。 sofastack 其实出来很久了&#xff0c;第一次应该是在 2022 年左右开始关注&#xff0c;但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFAStack-00-sofa 技术栈概览 MOSN&#xff08;Modular O…

Flink介绍与安装

Apache Flink是一个在有界数据流和无界数据流上进行有状态计算分布式处理引擎和框架。Flink 设计旨在所有常见的集群环境中运行&#xff0c;以任意规模和内存级速度执行计算。 一、主要特点和功能 1. 实时流处理: 低延迟: Flink 能够以亚秒级的延迟处理数据流&#xff0c;非常…

【gradio】从零搭建知识库问答系统-Gradio+Ollama+Qwen2.5实现全流程

从零搭建大模型问答系统-GradioOllamaQwen2.5实现全流程&#xff08;一&#xff09; 前言一、界面设计&#xff08;计划&#xff09;二、模块设计1.登录模块2.注册模块3. 主界面模块4. 历史记录模块 三、相应的接口&#xff08;前后端交互&#xff09;四、实现前端界面的设计co…

PowerBI,用度量值实现表格销售统计(含合计)的简单示例

假设我们有产品表 和销售表 我们想实现下面的效果 表格显示每个产品的信息&#xff0c;以及单个产品的总销量 有一个切片器能筛选各个门店的产品销量 还有一个卡片图显示所筛选条件下&#xff0c;所有产品的总销量 实现方法&#xff1a; 1.我们新建一个计算表&#xff0c;把…

26考研——查找_树形查找_二叉排序树(BST)(7)

408答疑 文章目录 三、树形查找二叉排序树&#xff08;BST&#xff09;二叉排序树中结点值之间的关系二叉树形查找二叉排序树的查找过程示例 向二叉排序树中插入结点插入过程示例 构造二叉排序树的过程构造示例 二叉排序树中删除结点的操作情况一&#xff1a;被删除结点是叶结点…

【行驶证识别】批量咕嘎OCR识别行驶证照片复印件图片里的文字信息保存表格或改名字,基于QT和腾讯云api_ocr的实现方式

项目背景 在许多业务场景中,如物流管理、车辆租赁、保险理赔等,常常需要处理大量的行驶证照片复印件。手动录入行驶证上的文字信息,像车主姓名、车辆型号、车牌号码等,不仅效率低下,还容易出现人为错误。借助 OCR(光学字符识别)技术,能够自动识别行驶证图片中的文字信…

21.Excel自动化:如何使用 xlwings 进行编程

一 将Excel用作数据查看器 使用 xlwings 中的 view 函数。 1.导包 import datetime as dt import xlwings as xw import pandas as pd import numpy as np 2.view 函数 创建一个基于伪随机数的DataFrame&#xff0c;它有足够多的行&#xff0c;使得只有首尾几行会被显示。 df …