pipeline开发笔记
pipeline开发笔记
- jenkins常用插件
- Build Authorization Token Root
- 配置GitLab的webhooks(钩子)
- 配置构建触发器--示例
- piblish over ssh
- Blue Ocean
- Workspace Cleanup Plugin
- Git插件
- Pipeline
- Localization: Chinese (Simplified) --中文显示
- Build Environment Plugin 显示构建过程中的变量
- Role-based Authorization Strategy
- Pipeline Stage View
- ThinBackup 备份插件
- vscode常用pipeline插件
- GroovyLint
- Jenkins Pipeline Linter Connector
- pipeline语法
- Parameters参数列表
- 多行shell锁定工作目录
- 改变工作目录
- Options
- post后置条件
- pipeline框架
- pipeline模块
- dockerfile模块
jenkins常用插件
Build Authorization Token Root
参考链接:https://blog.csdn.net/weixin_45310323/article/details/130237311
使用拥有 读取权限
的 匿名用户
访问,配置 钩子链接(webhook)
时需要用到, 如果不使用,每次访问链接都需要提供认证!
该插件的作用是即使匿名用户
看不到Jenkins,也可以访问构建和相关的REST构建触发器
。用法是在网络钩子链接中输入:
# JENKINS_SITE 为Jenkins站点地址
# JOB_NAME 为任务名称
# SECRET 为触发远程构建的身份验证令牌值
http://${JENKINS_SITE}/buildByToken/build?job=${JOB_NAME}&token=${SECRET}
配置GitLab的webhooks(钩子)
选择仓库
> 设置
> webhooks
OK! 完成了 当提交代码到gitlab
后会自动构建任务
配置构建触发器–示例
针对 JAR-1任务
添加token(令牌)
如下图:
添加完成后浏览器调用地址:http://${Jenkins_URL}
/buildByToken/build?job=JAR-1
&token=666666
,调用成功后在Jenkins页面可以观察到是否自动构建此任务了
piblish over ssh
可以实现不同节点之间传递文件,比如A节点将代码编译打包好,然后通过ssh发送到目标节点上,配置相应的命令完成项目的部署,目标节点无需是是一个slave,只要A节点能够通过ssh连接到B节点即可。
Blue Ocean
简化Jenkins显示
Workspace Cleanup Plugin
清理工作空间
Git插件
当前版本:4.12.1
插件地址:https://plugins.jenkins.io/git/
作用:该插件为Jenkins项目提供了基本的git操作。它可以轮询、提取、签出、分支、列表、合并、标记和推送存储库。
我们其实安装该插件,就可以实现Git项目的代码拉取了。
这个是最基本核心的插件。后面Git client,Git server Plugin, GitHub plugin ,GitLab Plugin都是针对具体功能需求,减少操作步骤而封装的各种专用场景下的插件。
Pipeline
插件地址:https://plugins.jenkins.io/workflow-aggregator/
作用:该插件给Jenkins提供Pipeline功能。这个插件和它依赖的其他插件,整体组成了Jenkins 2.0的Pipeline功能。
例如:
Pipeline Graph Analysis Plugin : 提供 REST API的pipeline访问和管理功能。
Pipeline: API:定义管道API的插件。
Pipeline: Basic Steps:添加管道步骤“build”以触发其他作业的生成。
Pipeline: Declarative:一个顽固的声明性的管道。
Localization: Chinese (Simplified) --中文显示
插件地址:https://plugins.jenkins.io/localization-zh-cn/
作用:该插件为Jenkins 提供了简体中文语言包。
我们Jenkins中的各种配置项,有些是中文有些是英文,那就是这个插件包在生效。它对部分功能实现了翻译,部分功能没有翻译造成的。我们如果想使用纯英文版本可以关闭该插件。
Build Environment Plugin 显示构建过程中的变量
当前版本:1.7
插件地址:https://plugins.jenkins.io/build-environment
作用:这个插件显示了关于构建环境的信息,并提供了比较两个构建环境的选项。它可以将我们整个构建过程中的全局变量全部展示出来。相较于Environment Injector Plugin 插件,它能够显示更多的变量。
我们如果在使用Groovy脚本的时候,不知道有哪些全局属性。或者我们构造过程中用的很多插件,但是不知道那些插件有没有暴露一些全局参数。都可以用这个接口进行测试和清理。
同时它还能将参数数据进行一个记录。跟随每次构建的输出结果进行展示
Role-based Authorization Strategy
插件地址: https://plugins.jenkins.io/role-strategy
推荐理由:
Enables user authorization using a Role-Based strategy. Roles can be defined globally or for particular jobs or nodes selected by regular expressions.
使用基于角色的策略启用用户授权。可以全局定义角色,也可以为正则表达式选择的特定作业或节点定义角色。
Pipeline Stage View
插件地址:【https://plugins.jenkins.io/pipeline-stage-view/](https://plugins.jenkins.io/pipeline-stage-view/)
Pipeline 各阶段可视化插件。
ThinBackup 备份插件
插件官网: https://plugins.jenkins.io/thinBackup
vscode常用pipeline插件
GroovyLint
groovy语法检查工具
Jenkins Pipeline Linter Connector
pipeline语法检查工具
pipeline语法
5个必备的组成部分
关键字 | 解释 |
---|---|
pipeline | 定义一个流水线 |
agent | 指定执行器 |
stages | 阶段集 |
stage | 阶段 |
steps | 步骤 |
Parameters参数列表
Parameters
提供了一个用户在触发流水线时应该提供的参数列表,这些用户指定参数的值可以通过 params
对象提供给流水线的 step(步骤)。只能定义在 pipeline
顶层。
目前支持的参数类型如下:
string
:字符串类型的参数。text
:文本型参数,一般用于定义多行文本内容的变量。booleanParam
:布尔型参数。choice
:选择型参数,一般用于给定几个可选的值,然后选择其中一个进行赋值。password
:密码型变量,一般用于定义敏感型变量,在 Jenkins 控制台会输出为*
。
插件 Parameters:
imageTag
:镜像 tag,需要安装Image Tag Parameter
插件后使用gitParameter
:获取 git 仓库分支,需要Git Parameter
插件后使用
示例:
pipeline {agent anyparameters {//执行构建时需要手动配置字符串类型参数,之后赋值给变量string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '1')//执行构建时需要提供文本参数,之后赋值给变量text(name: 'DEPLOY_TEXT', defaultValue: 'One\nTwo\nThree\n', description: '2')//布尔型参数booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '3')//选择形式列表参数choice(name: 'CHOICES', choices: ['one', 'two', 'three'], description: '4')//密码类型参数,会进行加密password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'A secret password')//获取镜像名称与tagimageTag(name: 'DOCKER_IMAGE', description: '', image: 'kubernetes/kubectl', filter: '.*', defaultTag: '', registry: 'https://192.168.10.15', credentialId: 'harbor-account', tagOrder: 'NATURAL')//获取git仓库分支列表,必须有git引用gitParameter(branch: '', branchFilter: 'origin/(.*)', defaultValue: '', description: 'Branch for build and deploy', name: 'BRANCH', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH')}stages {stage('env1') {steps {sh 'env'}}stage('git') {steps {//使用gitParameter,必须有这个git branch: "$BRANCH", credentialsId: 'gitlab-key', url: 'git@192.168.10.14:root/env.git'}}}
}
多行shell锁定工作目录
单行sh,cd到目录后,执行完这行shell会自动回到默认目录
;
用多行shell 解决,多行shell内,都在cd到的目录。
stage("执行构建") {steps {sh """cd demo_dirmvn clean package"""}echo "构建完成"
}
改变工作目录
pipeline的默认工作目录是${Workspace}
, 可以通过dir()
来改变这个步骤的工作目录
。
// 拉取代码阶段stage('Checkout') {steps {dir("${CODE_DIR}") {// 使用git插件从指定的仓库拉取代码,分支为params.BRANCH参数指定的值git branch: params.BRANCH, url: 'https://github.com/your/repo.git'}}}
Options
参考:https://www.cnblogs.com/jingzh/p/16900430.html#12-%E5%A3%B0%E6%98%8E%E5%BC%8F%E6%B5%81%E6%B0%B4%E7%BA%BF%E7%AE%80%E4%BB%8B
Jenkins流水线支持很多内置指令,比如 retry 可以对失败的步骤进行重复执行 n 次,可以根据不同的指令实现不同的效果。
比较常用的指令如下:
参数 | 解释 |
---|---|
buildDiscarder | 保留多少个流水线的构建记录 |
disableConcurrentBuilds | 禁止流水线并行执行,防止并行流水线同时访问共享资源导致流水线失败。 |
disableResume | 如果控制器重启,禁止流水线自动恢复。 |
newContainerPerStage | agent 为 docker 或 dockerfile 时,每个阶段将在同一个节点的新容器中运行,而不是所有的阶段都在同一个容器中运行。 |
quietPeriod | 流水线静默期,也就是触发流水线后等待一会在执行。 |
retry | 流水线失败后重试次数。 |
timeout | 设置流水线的超时时间,超过流水线时间,job 会自动终止。如果不加unit 参数默认为 1 分。 |
timestamps | 为控制台输出时间戳。 |
options {//保留三个历史构建版本--效果如下图所示buildDiscarder(logRotator(numToKeepStr: '3'))//注意手动触发的构建不生效quietPeriod(10)//流水线失败后重试次数retry(3)//超时时间1小时,如果不加unit参数默认为1分timeout(time: 1, unit: 'HOURS')//所有输出每行都会打印时间戳timestamps()}
post后置条件
Post 一般用于流水线结束后的进一步处理,比如错误通知等。Post 可以针对流水线不同的结果做出不同的处理,就像开发程序的错误处理,比如 Python 语言的 try catch。
Post 可以定义在 Pipeline 或 stage 中,目前支持以下条件
参数 | 解释 |
---|---|
always | 无论 Pipeline 或 stage 的完成状态如何,都允许运行该 post 中定义的指令; |
changed | 只有当前 Pipeline 或 stage 的完成状态与它之前的运行不同时,才允许在该 post 部分运行该步骤; |
fixed | 当本次 Pipeline 或 stage 成功,且上一次构建是失败或不稳定时,允许运行该 post 中定义的指令; |
regression | 当本次 Pipeline 或 stage 的状态为失败、不稳定或终止,且上一次构建的 状态为成功时,允许运行该 post 中定义的指令; |
failure | 只有当前 Pipeline 或 stage 的完成状态为失败(failure),才允许在 post 部分运行该步骤,通常这时在 Web 界面中显示为红色 |
success | 当前状态为成功(success),执行 post 步骤,通常在 Web 界面中显示为蓝色 或绿色 |
unstable | 当前状态为不稳定(unstable),执行 post 步骤,通常由于测试失败或代码 违规等造成,在 Web 界面中显示为黄色 |
aborted | 当前状态为终止(aborted),执行该 post 步骤,通常由于流水线被手动终止触发,这时在 Web 界面中显示为灰色; |
unsuccessful | 当前状态不是 success 时,执行该 post 步骤; |
cleanup | 无论 pipeline 或 stage 的完成状态如何,都允许运行该 post 中定义的指令。和 always 的区别在于,cleanup 会在其它执行之后执行。 |
pipeline框架
/* groovylint-disable CompileStatic */
pipeline {// 指定构建代理,这里使用任意可用的节点/* groovylint-disable-next-line TrailingWhitespace */agent any// 定义了 Pipeline 的一些全局选项options {//超时时间1小时,如果不加unit参数默认为1分timeout(time: 1, unit: 'HOURS')//所有输出每行都会打印时间戳timestamps()//保留三个历史构建版本buildDiscarder(logRotator(numToKeepStr: '3'))//注意手动触发的构建不生效quietPeriod(10)//流水线失败后重试次数retry(3)}parameters {string(name: 'BRANCH', defaultValue: 'main', description: '分支名称') // 定义一个字符串类型的参数,用于指定要构建的分支,默认值为mainbooleanParam(name: 'BUILD_TYPE', defaultValue: false, description: '是否构建') // 定义一个布尔类型的参数,用于控制是否执行构建阶段,默认值为false/* groovylint-disable-next-line LineLength */choice(name: 'ENVIRONMENT', choices: ['dev', 'test', 'prod'], description: '部署环境') // 定义一个选择类型的参数,用于选择部署环境,选项包括dev、test、prod}environment {// 定义代码存放的目录CODE_DIR = '/tmp/code_local_dir'}stages {// 拉取代码阶段stage('Checkout') {steps {dir("${CODE_DIR}") {// 使用git插件从指定的仓库拉取代码,分支为params.BRANCH参数指定的值git branch: params.BRANCH, url: 'https://github.com/your/repo.git'}}}stage('Build') { // 定义一个名为Build的阶段when { // 设置阶段执行条件expression { params.BUILD_TYPE == 'true' } // 只有当BUILD_TYPE参数为true时才执行}steps {// 构建步骤,例如编译、打包等}}stage('Test') { // 定义一个名为Test的阶段steps {// 测试步骤,例如运行单元测试、集成测试等}}stage('Deploy') { // 定义一个名为Deploy的阶段when { // 设置阶段执行条件expression { params.ENVIRONMENT != '' } // 只有当ENVIRONMENT参数不为空时才执行}steps {// 部署步骤,例如部署到不同的环境}}}post { // 定义构建结束后执行的步骤always { // 无论构建成功、失败还是被中断,都会执行// 总是执行的步骤,例如清理工作、发送通知等}success { // 构建成功时执行// 成功时的步骤,例如发送成功通知}failure { // 构建失败时执行// 失败时的步骤,例如发送失败通知}}
}
pipeline模块
dockerfile模块
但是感觉很鸡肋。。。
agent {dockerfile {filename 'Dockerfile.build' //dockerfile文件名称dir 'build' //执行构建镜像的工作目录label 'role-master' //执行的node节点,标签选择additionalBuildArgs '--build-arg version=1.0.2' //构建参数}
}
相关文章:
pipeline开发笔记
pipeline开发笔记 jenkins常用插件Build Authorization Token Root配置GitLab的webhooks(钩子)配置构建触发器--示例 piblish over sshBlue OceanWorkspace Cleanup PluginGit插件PipelineLocalization: Chinese (Simplified) --中文显示Build Environment Plugin 显示构建过程…...
spark读取parquet文件
源码 parquet文件读取的入口是FileSourceScanExec,用parquet文件生成对应的RDD 非bucket文件所以走createNonBucketedReadRDD方法。 createNonBucketedReadRDD 过程: 确定文件分割参数 openCostInBytes4M 相关参数spark.sql.files.openCostInBytes4M…...
redis详细教程(1.String类型)
Redis 的 String 类型内部使用了一种叫做 SDS(Simple Dynamic String)的结构。SDS 的设计比传统的 C 语言字符串更加高效和安全,主要特点如下: 头部信息:SDS 的头部包含了一些元数据,比如字符串的长度、剩…...
用友U8接口-库存管理(7)
概括 本文的操作需要正确部署U8API主要讲述库存管理接口的使用,以产成品入库单作为说明,其他单据接口都是大同小异的!许多时候先在ERP做个单,然后仿造ERP单据参数,构造接口JSON参数是不错的做法。 获取Token访问令牌…...
Spring Boot HikariCP数据库连接池入门
1. 概述 在我们的项目中,数据库连接池基本是必不可少的组件。在目前数据库连接池的选型中,主要是 Druid ,为监控而生的数据库连接池。HikariCP ,号称性能最好的数据库连接池。 至于怎么选择,两者都非常优秀&#x…...
Docker快速上手教程:MacOS系统【安装/配置/使用/原理】全链路速通
背景 最近换了个 Macbook Air M3, 写个人项目需要用到 Docker,配置过程有一点点坎坷,还是得记录下避免重蹈覆辙。 什么。为什么是买 Air 而不是 Pro Max? 因为码农的钱也是钱啊。 这里我不会先讲原理,我认为工程的事情都是先看到现象,有了概念的轮廓,才应该去研究原理,…...
【JavaSE】认识String类,了解,进阶到熟练掌握
#1024程序员节 | 征文# 下面就让博主带领大家一起解决心中关于String类的疑问吧~~~ 1.字符串构造: 第一种和第二种(有一定的区别,在常量池上) public static void main(String[] args) { // 使用常量串构造 String s1 "h…...
vue3 vben-admin 窗口大小更改后 echarts尺寸变为 100px的问题
问题描述: 当切换切换tab 并且窗口尺寸更改时, echarts的尺寸因为父元素为 0, 自动设置为 100px 网上查找资料的结果: 1,使用vue 中的 v-if 来重新设置dom树 缺点: 频繁操作dom树结构, 极其消耗性能 优点: 自适应展示 2,设置固定宽高 缺点: 不能自适应展示, 无需消耗额外…...
Web应用框架-Django应用基础(3)-Jinja2
1.创建姓名模板 username里的数据发生改变,页面中渲染的数据发生改变,该效果称为动态数据 #hello/views:def hello_user(request):username000html <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8&quo…...
js(深浅拷贝,节流防抖,this指向,改变this指向的方法)
一、深浅拷贝 1.基本数据类型和引用数据类型的区别: 1. 基本数据类型的变量存储的是值 引用数据类型的变量存储的是地址值 2. 基本数据类型的变量存储的值在栈内存 引用数据类型的变量存储的值在堆内存 3. 基本数据类型的变量存储的是值和值之间相互不影响 引用数据…...
香橙派5(RK3588)使用npu加速yolov5推理的部署过程
香橙派5使用npu加速yolov5推理的部署过程 硬件环境 部署过程 模型训练(x86主机) 在带nvidia显卡(最好)的主机上进行yolo的配置与训练, 获取最终的best.pt模型文件, 详见另一篇文档 模型转换(x86主机) 下载airockchip提供的yolov5(从pt到onnx) 一定要下这个版本的yolov5, …...
基于MWORKS的蓝桥杯「智能装备数字化建模大赛」正式发布,首期培训本周六开启
为强化装备数字化人才培养,推动装备数字化技术快速发展,第十六届蓝桥杯全国软件和信息技术专业人才大赛设置专项赛暨智能装备数字化建模大赛,使用MWORKS作为参赛软件。关于参赛软件授权、技术支持与培训、教材与案例开发支持、成果转化培训及…...
021、深入解析前端请求拦截器
目录 深入解析前端请求拦截器: 1. 引言 2. 核心实现与基础概念 2.1 基础拦截器实现 2.2 响应拦截器配置 3. 实际应用场景 3.1 完整的用户认证系统 3.2 文件上传系统 3.3 API请求缓存系统 3.4 请求重试机制 3.5 国际化处理 4. 性能优化实践 4.1 请求合并…...
windows中的tracert命令
在 Windows 操作系统中,tracert(全称 Trace Route)是一个用于确定 IP 数据包到达目标主机所经过的路径的命令行工具。它通过发送具有不同生存时间(TTL)的 ICMP(Internet Control Message Protocolÿ…...
【玩儿】Java 数字炸弹小游戏(控制台版)+ IO 数据存储
Java 数字炸弹小游戏(控制台版) IO 数据存储 数字炸弹小游戏概述功能实现实体类User.java 玩家信息实体类GameRecode.java 游戏记录实体类 自定义异常AccountLockedException.java 账号锁定异常PasswordErrorException.java 密码错误异常UnknowAccountEx…...
今日头条躺赚流量:自动化新闻爬取和改写脚本
构建一个自动化的新闻爬取和改写系统,实现热点新闻的自动整理和发布,需要分为以下几个模块:新闻爬取、信息解析与抽取、内容改写、自动发布。以下是每个模块的详细实现步骤和代码示例: 1. 新闻爬取模块 目标:从新闻网…...
日常实习与暑期实习详解
日常实习与暑期实习详解 问了下正在实习的同学,发现天要塌了–才知道日常实习是没有笔试的 1. 实习的定义 1.1 日常实习 日常实习是企业长期招聘的实习岗位,通常没有时间限制。企业会在需要时进行招聘,招聘对象包括在校大学生和大一、大二的…...
Git的原理和使用(六)
本文主要讲解企业级开发模型 1. 引入 交付软件的流程:开发->测试->发布上线 上面三个过程可以详细划分为一下过程:规划、编码、构建、测试、发 布、部署和维护 最初,程序⽐较简单,⼯作量不⼤,程序员⼀个⼈可以完…...
Elasticsearch 中的高效按位匹配
作者:来自 Elastic Alexander Marquardt 探索在 Elasticsearch 中编码和匹配二进制数据的六种方法,包括术语编码(我喜欢的方法)、布尔编码、稀疏位位置编码、具有精确匹配的整数编码、具有脚本按位匹配的整数编码以及使用 ESQL 进…...
LSTM,全称长短期记忆网络(Long Short-Term Memory),是一种特殊的循环神经网络(RNN)结构
关于lstm超参数设置,每个参数都有合适的范围,超过这个范围则lstm训练不再有效,loss不变,acc也不变 LSTM,全称长短期记忆网络(Long Short-Term Memory),是一种特殊的循环神经网络&am…...
导出问题处理
问题描述 测试出来一个问题,使用地市的角色,导出数据然后超过了20w的数据,提示报错,我还以为是偶然的问题,然后是发现是普遍的问题,本地环境复现了,然后是,这个功能是三套角色&…...
通过cv库智能切片 把不同的分镜切出来 自媒体抖音快手混剪
用 手机自动化脚本,从自媒体上获取视频,一个商品对应几百个视频,我们把这几百个视频下载下来,进行分镜 视频切片,从自媒体上下载视频,通过cv库用直方图识别每个镜头进行切片。 下载多个图片进行视频的伪原…...
【机器学习】——numpy教程
文章目录 1.numpy简介2.初始化numpy3.ndarry的使用3.1numpy的属性3.2numpy的形状3.3ndarray的类型 4numpy生成数组的方法4.1生成0和1数组4.2从现有的数组生成4.3生成固定范围的数组4.4生成随机数组 5.数组的索引、切片6.数组的形状修改7.数组的类型修改8.数组的去重9.ndarray的…...
多线程——线程的状态
线程状态的意义 线程状态的意义在于描述线程在执行过程中的不同阶段和条件,帮助开发者更好地管理和调度线程资源。 线程的多种状态 线程的状态是一个枚举类型(Thread.State),可以通过线程名.getState()…...
开源数据库 - mysql - 组织结构(与oracle的区别)
组织形式区别 mysql(Schema -> Table -> Column -> Row) Schema(方案): Scheme是关于数据库和表的布局及特性的信息。它可以用来描述数据库中特定的表以及整个数据库和其中表的信息,如表的一些特…...
vue3+vite 部署npm 包
公司需要所以研究了一下怎么部署安装,比较简单 先下载个vue项目 不用安准路由,pinna 啥的,只需要一个最简单的模版 删掉App.vue 中的其它组件 npm create vuelatest 开始写自定义组件 新建一个el-text 组件, name是重点,vue3中…...
华为鸿蒙HarmonyOS应用开发者高级认证视频及题库答案
华为鸿蒙开发者高级认证的学习资料 1、课程内容涵盖HarmonyOS系统介绍、DevEco Studio工具使用、UI设计与开发、Ability设计与开发、分布式特性、原子化服务卡片以及应用发布等。每个实验都与课程相匹配,帮助加深理解并掌握技能 2、学习视频资料 华为HarmonyOS开发…...
【计网】从零开始认识IP协议 --- 认识网络层,认识IP报头结构
从零开始认识IP协议 1 网络层协议1.1 初步认识IP协议1.2 初步理解IP地址 2 IP协议报头3 初步理解网段划分 1 网络层协议 1.1 初步认识IP协议 我们已经熟悉了传输层中的UDP和TCP协议,接下来我们来接触网络层的协议: 网络层在计算机网络中的意义主要体现…...
大一物联网要不要转专业,转不了该怎么办?
有幸在2014年,踩中了物联网的风口,坏消息,牛马的我,一口汤都没喝上。 依稀记得,当时市场部老大,带我去上海参加电子展会,印象最深的,一些物联网云平台,靠着一份精美PPT&a…...
LeetCode题练习与总结:4的幂--342
一、题目描述 给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。 整数 n 是 4 的幂次方需满足:存在整数 x 使得 n 4^x 示例 1: 输入:n 16 输出&am…...
wordpress启用多站点和子站独立域名绑定后设置/网站seo诊断分析
前言 今年互联网形式依旧严峻,再次爆发几次大规模裁员潮。我决定把这篇文章分享出来帮助那些对前途感到迷茫的朋友。根据粉丝投稿的真实经历改编 在现在这个浮躁而又拜金的社会,我相信很多人做技术并非出于热爱,只是被互联网的高薪吸引&…...
厂房建设公司哪家好/太原网站制作优化seo
在OneNote中DIY自己需要的模板https://www.zhihu.com/video/1198284361613672449在印象笔记中,通过表格的添加和自定义,我们可以做出几乎任何生活、工作或学习当中所需的模板。而在 OneNote 当中,可以怎么做呢?在 Windows 电脑的 …...
wordpress 便签/百度电话客服
“每个品牌商都希望产品快速地到达用户手中,能够形成一个产品体验和用户交互的过程。”奥克斯家电天猫渠道经理郭施露说,“但是一直以来,厂家受制于信息化建设水平,以及并不直接面对用户等原因,这一愿望很难实现”。 对…...
深圳双语网站制作/应用商店下载
转自:http://blog.csdn.net/hanxiaoshuang321123/article/details/7342091 Struts2多个文件上传 多个文件上传分为List集合和数组,下面我们着重介绍一下list集合的上传。都大同小异。 一 介绍 1. 在struts2文件上传的时候要先导入struts2的几…...
今日头条新闻最新消息/重庆seo结算
1.定义: 映射是一系列 键值对的容器 map中的Key是唯一的 分为可变map和 不可变map 可变集合:scala.collection.mutable.map 不可变集合:scala.collection.immutable.map 默认使用 不可变集合, 使用可变map需要先导入 可变包 scala.collec…...
网站建设培训费用/百度关键词排名突然消失了
2019独角兽企业重金招聘Python工程师标准>>> -- 创建表空间 create tablespace test datafile F:\oracle-data\oradata\orcl\test_data.dbf size 500m; -- 修改默认表空间 alter database default tablespace test; -- 查看用户使用的表空间 select * from dba_user…...