DevOps入门(下)

news2024/12/23 9:07:09
原文阅读:【巨人肩膀社区·博客·分享】DevOps入门

3: 创建项目

代码在本地修改----提交到远程gitee----触发jenkins整个自动化构建流程(打包,测试,发布,部署)

创建spring_boot项目 创建git仓库,项目中创建一个Jenkinsfile文件





4:创建项目



4.1创建流水线



4.2 创建脚本文件



4.3 配置流水线



4.4 进入 Blue Ocean



4.5 运行



4.6 创建Jenkinsfile 文件,编写声明式语法,提交gitee

pipeline{
    // 定义全部的流程
    //任何代理可以用就执行
       agent any
//     agent none  //以后所有的stage都必须指定自己的
    //定义环境信息
    environment {
        name = "lqf"
    }
    //定义流水线的所有阶段
    stages{
        //编译
        stage('代码编译'){
//             agent {
//                   docker { image 'maven:3-alpine'
//                             args '-v $HOME/.m2:/root/.m2'
//                         }
//                 }
        steps{
                //做的所有事情
                echo "编译阶段"
                bat 'dir'
//                 emailext body: 'qq', subject: 'qq', to: '1475@qq.com'
                echo "$name"
                echo "${name}"
//                 sh 'pwd && ls -alh'
//                 sh 'printenv'
        }
        }
        stage('代码测试'){
                 steps{
                //做的所有事情
                echo "测试阶段"
                }
        }
        stage('代码打包'){
                 steps{
                //做的所有事情
                echo "打包阶段"

                }
         }
    }
}

此内容来自互联网

//写流水线的脚本(声明式、脚本式)
pipeline{
    //全部的CICD流程都需要在这里定义

    //任何一个代理可用就可以执行
   // agent none  //以后所有stage都必须指定自己的
    agent any




    //定义一些环境信息
    environment {
      hello = "123456"
      world = "456789"
      WS = "${WORKSPACE}"
      IMAGE_VERSION = "v1.0"

//引用Jenkins配置的全局秘钥信息
      ALIYUN_SECRTE=credentials("aliyun-docker-repo")
    }

    //定义流水线的加工流程
    stages {
        //流水线的所有阶段
        stage('环境检查'){
            steps {
               sh 'printenv'
               echo "正在检测基本信息"
               sh 'java -version'
               sh 'git --version'
               sh 'docker version'
               sh 'pwd && ls -alh'
               sh "echo $hello"
               //未来,凡是需要取变量值的时候,都用双引号
               sh 'echo ${world}'
               sh "ssh --help"
            }
        }
        //1、编译 "abc"
        stage('maven编译'){
            //jenkins不配置任何环境的情况下, 仅适用docker 兼容所有场景
            agent {
                docker {
                    image 'maven:3-alpine'
                    args '-v /var/jenkins_home/appconfig/maven/.m2:/root/.m2'
//                     args  '-v /a/settings.xml:/app/settings.xml'
                    //docker run -v /a/settings.xml:/app/settings.xml
                 }
            }
            steps {
               //git下载来的代码目录下
               sh 'pwd && ls -alh'
               sh 'mvn -v'
               //打包,jar.。默认是从maven中央仓库下载。 jenkins目录+容器目录;-s指定容器内位置
               //只要jenkins迁移,不会对我们产生任何影响
               sh "echo 默认的工作目录:${WS}"
//                sh 'cd ${WS}'
               //workdir
               //每一行指令都是基于当前环境信息。和上下指令无关
               sh 'cd ${WS} && mvn clean package -s "/var/jenkins_home/appconfig/maven/settings.xml"  -Dmaven.test.skip=true '
               //jar包推送给maven repo ,nexus
               //如何让他适用阿里云镜像源

            }
        }

        //2、测试,每一个 stage的开始,都会重置到默认的WORKSPACE位置
        stage('测试'){
            steps {
                sh 'pwd && ls -alh'
                echo "测试..."
            }
        }

        //3、打包
        stage('生成镜像'){
            steps {
                echo "打包..."
                //检查Jenkins的docker命令是否能运行
                sh 'docker version'
                sh 'pwd && ls -alh'
                sh 'docker build -t java-devops-demo .'

                //镜像就可以进行保存


            }
        }



         stage('推送镜像'){
         //没有起容器代理,默认就是jenkins环境
             //step里面卡点这么写
//              input message: '需要推送远程镜像吗?', ok: '需要', parameters: [text(defaultValue: 'v1.0', description: '生产环境需要部署的版本', name: 'APP_VER')]

             //step外面这么写
             input {
                 message "需要推送远程镜像吗?"
                 ok "需要"
                 parameters {
                     string(name: 'APP_VER', defaultValue: 'v1.0', description: '生产环境需要部署的版本')
                     choice choices: ['bj-01', 'sh-02', 'wuhan-01'], description: '部署的大区', name: 'DEPLOY_WHERE'
                 }
             }


             steps {
                //false就直接结束

                echo "$APP_VER"


                //脚本方式进行判断,和具体逻辑
                // 远程触发,自动分析是哪个分支,如果是master就部署生产,dev就集成测试等
                // gulimall
                //    mall-order
                //    mall-user
                //    xx 100个微服务
                //  哪一个微服务代码提交了部署哪一个微服务,不用手工干预,只需要一个jenkinsfile
                //Generic Webhook Trigger 远程触发jenkins,jenkins获取当前提交的分支,和所有分支
                // gitee会告诉我们这次 add了哪些,modify了哪些,delete了哪些,
                // add了哪些,modify了哪些,delete了哪些, 自己判断这些修改的文件在哪个模块下
                //对这个模块进行持续集成

                //Generic Webhook Trigger + script脚本 + 其他已讲过的内容 + 其他自己看看官网 = 搞定
                //别人提交一个issue,jenkins触发 自动把issue做成 fix分支,让程序员自己去修改
                //所有东西都是模板
                script {
                   //groovy
                   def  where = "${DEPLOY_WHERE}"

                   if (where == "bj-01"){
                    sh "echo 我帮你部署到 bj-01 区了"
                   }else if(where == "sh-02"){
                   sh "echo 我帮你部署到 sh-02 区了"
                   }else{
                        sh "echo 没人要的,我帮你部署到 wuhan-01 区了"
//                    sh "docker push registry.cn-hangzhou.aliyuncs.com/lfy/java-devops-demo:${APP_VER}"
                        withCredentials([usernamePassword(credentialsId: 'aliyun-docker-repo', passwordVariable: 'ali_pwd', usernameVariable: 'ali_user')]) {
                            // some block
                             sh "docker login -u ${ali_user} -p ${ali_pwd}   registry.cn-hangzhou.aliyuncs.com"
//                              sh "docker tag java-devops-demo registry.cn-hangzhou.aliyuncs.com/lfy/java-devops-demo:${APP_VER}"
                        }

                        //ssh 秘钥文件配置到 jenkins 全局秘钥中
                        withCredentials(ssh){
                          //ansible 没有
                          sh "ssh root@xxxx  "
                          //不应该的操作。
                          sh "远程操作其他机器。。。。"

                          //k8s集群
                          //动态切换k8s集群

                        }
                   }
                }

//                 sh "docker push registry.cn-hangzhou.aliyuncs.com/lfy/java-devops-demo:${APP_VER}"

             }
         }

        //4、部署
        stage('部署'){
            steps {
                echo "部署..."
                sh 'docker rm -f java-devops-demo-dev'
                sh 'docker run -d -p 8888:8080 --name java-devops-demo-dev java-devops-demo'
            }

            //后置执行
//             post {
//               failure {
//                 // One or more steps need to be included within each condition's block.
//                 echo "炸了.. ."
//               }
//
//               success {
//                 echo "成了..."
//               }
//             }
        }

        //5、推送报告
        stage("发送报告"){
            steps {
                //短信通知,购买api接口即可
//                 sh 'curl -i -k -X POST 'https://gyytz.market.alicloudapi.com/sms/smsSend?mobile=mobile¶m=**code**%3A12345%2C**minute**%3A5&smsSignId=2e65b1bb3d054466b82f0c9d125465e2&templateId=908e94ccf08b4476ba6c876d13f084ad'  -H 'Authorization:APPCODE dddddddd''
                //REST API 所有都行
//                 sh 'curl '
                echo '准备发送报告'
                emailext body: '''
                
                
                
                ${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志
                

                
                    本邮件由系统自动发出,请勿回复!
                            各位同事,大家好,以下为${PROJECT_NAME }项目构建信息
                
                        
                           
                            构建结果 - ${BUILD_STATUS}
                        
                        
                            
                            构建信息
                            
                        
                        
                            
                                
                                    项目名称 : ${PROJECT_NAME}
                                    构建编号 : 第${BUILD_NUMBER}次构建
                                    触发原因: ${CAUSE}
                                    构建状态: ${BUILD_STATUS}
                                    构建日志: ${BUILD_URL}console
                                    构建  Url : ${BUILD_URL}
                                    工作目录 : ${PROJECT_URL}ws
                                    项目  Url : ${PROJECT_URL}
                                


                最近提交
                
                
                ${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="%d [%a] %m"}
                
                详细提交: ${PROJECT_URL}changes

                            
                        
                    
                
                ''', subject: '${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志', to: '17512080612@163.com'
            }
        }

        stage('部署到生产环境吗?'){
            steps {
                // 手动输入版本【参数化构建】,推荐生成器

//                 input {
//                     message "需要部署到生产环境吗?"
//                     ok "是的,赶紧部署"
// //                     submitter "alice,bob"
//                     parameters {
//                         //手动传入的参数
//                         string(name: 'APP_VERSION', defaultValue: 'v1.0', description: '请指定生产版本号')
//                     }
//                 }
                sh "echo 发布版本咯......"
                // 版本的保存。代码的保存。镜像的保存。存到远程仓库

            }
        }

    }



//后置处理过程
        post {
          failure {
            echo "这个阶段 完蛋了.... $currentBuild.result"
          }
          success {
            echo "这个阶段 成了.... $currentBuild.result"
          }
        }
}

4.7 再次进入 Blue Ocean,点击运行









5 远程构建触发



5.1 用户设置toten

用户名:toten@路径地址

http://lqf:11720c4a7935250fbb89d25b5ba9cd6376@153.34.245.28:18080/job/java-devops-demo/build?token=lqf



5.2 测试请求成功,push的时候自动给jenkins发请求



5.3 push代码,这边自动触发构建



6 :自定义执行环境



如官方举例,每一个阶段可以基于自己的基础环境来构建

pipeline {
    agent {
        docker {
            image 'maven:3-alpine'
            args '-v $HOME/.m2:/root/.m2'
        }
    }
    stages {
        stage('Build') {
            steps {
                sh 'mvn -B'
            }
        }
    }
}

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

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

相关文章

便宜的电容笔推荐:2024返校季精选五款平价又好用的iPad电容笔!

近几年,随着无纸化学习的日益普及,电容笔的重要性也逐渐凸显。但是,原版电容笔的价格过高,对于很多学生党而言,寻找一款平价又好用的iPad电容笔就成了最优的选择。可是市面上的品牌很多,辨别优质产品的难度…

以简单的例子从头开始建spring boot web多模块项目(一)

目的:从头梳理,如何手工从头建立多模块项目。 步骤: 1、建立maven项目,类型:maven Archetype,Name:ParentDemo 选择JDK版本,Archetype:org.apache.maven.archetypes:maven-archetype-quickstart…

成都无人机飞手考证详解及前景分析

一、考证详解 1.1 考证背景与重要性 随着无人机技术的迅猛发展,无人机在航拍、农业、救援、物流等多个领域展现出广泛应用价值。为了规范无人机行业,保障公共安全和空域秩序,国家对无人机操作员实施了严格的资格认证制度。考取无人机飞手证…

公司员工电脑桌面太乱如何解决?桌面管理软件一招解决!

“工欲善其事,必先利其器。” 在数字化管理的时代背景下,选择合适的桌面管理软件就如同为企业网络管理装上了一双慧眼。 员工的电脑桌面往往因为长时间的使用而变得杂乱无章,这不仅影响了工作效率,还可能给企业信息安全带来隐患。…

Kali Linux 三种网络攻击方法总结(DDoS、CC 和 ARP 欺骗)

一、引言 在当今数字化的时代,网络安全成为了至关重要的议题。了解网络攻击的方法和原理不仅有助于我们增强防范意识,更是网络安全领域专业人员必备的知识。Kali Linux 作为一款专为网络安全专业人员和爱好者设计的操作系统,提供了丰富的工具…

DevOps入门(上)

1: DevOps概念 DevOps: Development 和 Operations 的组合 DevOps 看作开发(软件工程)、技术运营和质量保障(QA)三者的交集。 突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使…

【AI绘画】Midjourney前置指令/settings设置详解

文章目录 💯Midjourney前置指令/settings设置详解💯Use the default model(AI绘画所使用的大模型)Midjourney Model(Midjourney 模型)Niji Model(Niji模型) 💯Midjourney…

NLP实战三:Pytorch实现FastText文本分类

NLP实战一:Pytorch实现TextCNN文本分类 NLP实战二:Pytorch实现TextRNN 、TextRNNAttention文本分类 中文数据集 我从THUCNews中抽取了20万条新闻标题,已上传至github,文本长度在20到30之间。一共10个类别,每类2万条…

什么是品牌低价 低价要如何处理

在消费领域,当消费者遭遇商品价格混乱不堪的局面,他们大可以选择敬而远之,放弃购买。但对于品牌商而言,若线上出现低价、乱价的情况,若坐视不管,那必然会引发一系列严重后果。 品牌若是对线上的低价、乱价现…

IP报文详解

IP的作用 上一篇文章提到TCP的可靠传输机制,那么TCP有把数据从主机A到主机B的能力吗?答案是没有。而IP有这个能力,IP能够将数据从主机A跨网络传输到主机B的能力。那么一定能传输成功吗?答案肯定是否定的,会因为各种原…

Android TableLayout中TextView文本不居中问题

概述 | 平台 RK3288 Android 8.1 compileSdkVersion 26. | 问题 使用了TableLayout布局电话的拨号按键界面, 效果如下图 (正常): 在后续开发过程的某次修改后, 出现效果图(不正常): 合并两张效果图可看得更明显(红线参考位置): 在布局中 TextView 的 android:g…

计算机毕业设计选题推荐-豆瓣书籍可视化分析-Python爬虫-K-means算法

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

65 华为交换机CE6800基础配置

一 IPV6 使能配置思路 1 改华为交换机的名字 <huaweice65>sys Enter system view, return user view with return command. [~huaweice65]sysname HWCE6800 [*huaweice65]quit Warning: Uncommitted configurations found. Are you sure to commit them before exiting?…

数据的储存1(第30天)

补充&#xff1a;该代码在Debug下会死循环而在release版本下会正常运行&#xff0c;因为release会优化代码。 &#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;深度剖析数据在内存中的存储&#xff01;&#xff01;&#xf…

如何为PDF文件设置打开密码以保护文档安全

为PDF文件设置打开密码是一种有效的保护措施&#xff0c;它能防止未经授权的用户访问文件内容。以下是一份专业指南&#xff0c;详细介绍如何为PDF文件设置打开密码。 打开pdf编辑器&#xff0c;我们点击工具栏中的【文件】功能&#xff0c;选择里面的【属性】 然后在属性设置…

代码生成:自动化开发

在现代集成开发环境中&#xff0c;智能代码补全和代码生成功能是两个至关重要的组成部分。 智能代码补全利用当前上下文和代码库信息&#xff0c;向程序员推荐合适的代码选项&#xff0c;而代码生成则根据指定输入创建遵循语法和语义规范的代码片段。 许多先进的IDE如Visual St…

家里猫毛到处飞怎么办?如何清理?用宠物空气净化器去除猫毛

我家三只布偶原住民&#xff0c;都是掉毛怪&#xff0c;刚好还是不同的颜色&#xff0c;黑的灰的白的...家里和画板似的&#xff0c;每天都被猫毛上色&#xff0c;清扫时超级崩溃。沙发上、床上、地板上这些常见的地方就不用说了&#xff0c;甚至水杯和碗筷边偶尔也能看见猫毛&…

CTFHub~JWT漏洞靶场最详细教程

什么是JWT JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed…

新手教学系列——Redis分布式锁进阶版:如何实现支持同一个Key多把锁,并带有超时重试功能

在现代分布式系统中,锁机制是解决并发访问资源问题的重要手段之一。Redis作为一个内存数据库,由于其高效的读写能力和天然的分布式特性,常常被用作实现分布式锁的基础工具。然而,如何合理地实现一个支持多把锁的Redis锁,并且在失败时支持超时重试,这是一个进阶的问题。 …

前端面试——this指向

最近看到了面试题目有关于this指向的问题&#xff0c;网上搜了一篇文章&#xff0c;看了之后受益匪浅&#xff0c;特地总结一下。 原文章链接&#xff1a;前端面试中的“this”&#xff0c;你真的了解吗&#xff1f; - 哔哩哔哩 什么是this&#xff1f; this是一个特殊的关键…