DevOps入门(下)

2024-08-22 19:04
文章标签 入门 devops

本文主要是介绍DevOps入门(下),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文阅读:【巨人肩膀社区·博客·分享】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 {//groovydef  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 blocksh "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'}}}
}

这篇关于DevOps入门(下)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1097127

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C语言指针入门 《C语言非常道》

C语言指针入门 《C语言非常道》 作为一个程序员,我接触 C 语言有十年了。有的朋友让我推荐 C 语言的参考书,我不敢乱推荐,尤其是国内作者写的书,往往七拼八凑,漏洞百出。 但是,李忠老师的《C语言非常道》值得一读。对了,李老师有个官网,网址是: 李忠老师官网 最棒的是,有配套的教学视频,可以试看。 试看点这里 接下来言归正传,讲解指针。以下内容很多都参考了李忠老师的《C语言非

MySQL入门到精通

一、创建数据库 CREATE DATABASE 数据库名称; 如果数据库存在,则会提示报错。 二、选择数据库 USE 数据库名称; 三、创建数据表 CREATE TABLE 数据表名称; 四、MySQL数据类型 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串类型 4.1 数值类型 数值类型 类型大小用途INT4Bytes整数值FLOAT4By

Prometheus与Grafana在DevOps中的应用与最佳实践

Prometheus 与 Grafana 在 DevOps 中的应用与最佳实践 随着 DevOps 文化和实践的普及,监控和可视化工具已成为 DevOps 工具链中不可或缺的部分。Prometheus 和 Grafana 是其中最受欢迎的开源监控解决方案之一,它们的结合能够为系统和应用程序提供全面的监控、告警和可视化展示。本篇文章将详细探讨 Prometheus 和 Grafana 在 DevO