首页 文章 精选 留言 我的

精选列表

搜索[持续测试],共10000篇文章
优秀的个人博客,低调大师

openKylin 1.0.1 版本发布,持续精进带来更好体验!

openKylin 1.0.1版本积极响应社区用户反馈的需求,适配集成搜狗输入法NG麒麟桌面版,并上线新版麒麟管家应用,新增飞腾派嵌入式开发板镜像,重构侧边栏通知模块及新增支持系统组件数据埋点和用户隐私协议等,进一步提升用户体验;同时修复100+系统bug,提升系统整体稳定性和兼容性,欢迎大家更新体验! 01搜狗输入法NG麒麟桌面版 上海涛略信息技术有限公司与openKylin社区InputMethod SIG组开展合作,完成基于跨平台输入解决方案的搜狗输入法NG麒麟桌面版与openKylin系统的适配。目前此应用已在openKylin 1.0.1版本上预装,以带给用户流畅的输入体验。(注:1.0版本用户可以通过软件商店下载使用。) 02新版麒麟管家应用 新增服务支持工具 在使用openKylin系统的过程中如果遇到问题,可以通过麒麟管家的服务支持工具将问题描述、问题截图、系统信息、系统日志等相关信息快速提交到gitee平台,帮助用户快速排查和解决问题。 新增win迁移工具 通过麒麟管家的win迁移工具,可以将windows系统共享文件夹中的文档、图片、文件夹等内容快速同步到openKylin系统,轻松实现用户数据跨系统迁移。 03飞腾派镜像 飞腾信息技术有限公司与openKylin社区Embedded SIG组开展合作,完成了openKylin系统和飞腾派开发板的官方适配,丰富了openKylin在嵌入式领域的使用场景。同时,Embedded SIG组开发的嵌入式镜像构建工具 openKylin-embedded-builder也新增了对飞腾派镜像构建的支持,欢迎感兴趣的小伙伴前往体验! 项目地址: https://gitee.com/openkylin/openkylin-embedded-builder 安装方式 1、通过官网下载镜像全新安装(推荐) https://www.openkylin.top/downloads 2、已安装openKylin 1.0版本的用户可前往系统设置/更新界面完成系统更新 已修复重点BUG清单 ●【系统安装】修复虚拟机安装时地图界面显示不完整的问题 ●【系统安装】修复试用安装时打开安装程序后画面显示比例异常的问题 ●【开机启动】修复中文系统下点击添加后左侧的文件路径汉化不完全的问题 ●【登录选项】修复修改密码、录入指纹、重命名指纹窗口在多任务视图页面的窗口名错误的问题 ●【登录选项】修复修改密码时设置的新密码包含用户名时无相关提示的问题 ●【账户信息】修复修改密码字母为大写后登录失败且修改时无提示信息的问题 ●【账户信息】修复控制面板-新增用户时设置单一类型的密码或包含用户名的密码无提示信息的问题 ●【用户切换】修复用户切换进入已登录用用户时存在闪过屏保锁屏的问题 ●【侧边栏】修复手指从屏幕最右侧向左滑动唤出侧边栏后无法通过点击桌面等方式收起侧边栏的问题 ●【侧边栏】修复注销后重新进入系统时侧边栏图标显示延迟的问题 ●【侧边栏】修复英文模式下投屏和节能模式之间缺少空格的问题 ●【任务栏】修复旋转90度到平板模式再旋转回PC后任务栏消失的问题 ●【任务栏】修复缩放率为150%时改变分辨率后任务栏消失的问题 ●【任务栏】修复右键任务栏火狐浏览器新建隐私窗口未汉化的问题 ●【任务栏】修复默认固定的应用取消固定后重启会重新固定的问题 ●【任务栏】修复连接4K屏缩放修改为200%后任务栏显示不完整的问题 ●【时间与日期】修复系统安装时选择默认上海安装后系统时间比实际时间快8小时的问题 ●【时间和日期】修复字体设置最大号后页面按钮和下拉框与侧边无空隙的问题 ●【文件管理器】修复文件管理器未最大化时重命名文件输入框位置偏移的问题 ●【文件管理器】修复英文系统下左侧导航栏英化不完全的问题 ●【文件管理器】修复扫描文件名称相同时没有弹出提示弹窗的问题 ●【文件管理器】修复格式化U盘后文件管理器侧边栏出现两个U盘分区的问题 ●【文件管理器】修复删除文件到回收站的确认弹窗未居中显示的问题 ●【文件管理器】修复回收站删除文件的进度条没有实时显示进度的问题 ●【文件管理器】修复平板模式下进行文件多选时右上角的选择按钮没有变成全部选择和完成的问题 ●【文件管理器】修复平板模式选项下拉菜单存在操作类图标按钮的问题 ●【文件管理器】修复重命名框没有限制输入超过255字节的文件名的问题 ●【文件管理器】修复英文模式下文件管理器界面存在中文的问题 ●【电源管理】修复节能/性能模式前台和后台对应异常的问题 ●【电源管理】修复设置合盖时锁屏或休眠,开盖后出现键盘界面的问题 ●【蓝牙】修复任务栏蓝牙界面已连接的蓝牙设备未适配强调色的问题 ●【蓝牙】修复英文模式用户手册蓝牙模块的图片与实际不一致的问题 ●【蓝牙】修复系统语言为英文时,蓝牙设备连接失败文字提示存在截断的问题 ●【搜索】修复搜索AsHe时搜索结果出现两个“键盘-输入法设置”的问题 ●【搜索】修复英文系统下搜索不到背景的问题 ●【搜索】修复英文系统下搜索不到开机启动的问题 ●【看图】修复JPEG格式图片的ocr按钮置灰的问题 ●【看图】修复侧栏未跟随历史设置的问题 ●【看图】修复图片放大/缩小后双击图片,图片未适应屏幕显示的问题 ●【看图】修复工具栏/标题栏/切换按钮的隐藏/显示触摸触发范围有误的问题 ●【看图】修复工具栏-信息,图片大小单位未与系统统一显示为K 、 M的问题 ●【看图】修复标注-右键菜单标注功能置灰的问题 ●【看图】修复翻转后再标注,工具栏附近的毛玻璃效果显示异常的问题 ●【看图】修复ocr未识别到文字信息,“未检测到文本”字样可以被导出的问题 ●【看图】修复关于界面右上角关闭按钮悬浮文案汉化问题 ●【用户手册】修复设置页面打开用户手册跳转异常的问题 ●【用户手册】修复标题栏"≡"按钮名称为"菜单",应当为"选项"的问题 ●【用户手册】修复平板模式下有还原按钮的问题 ●【用户手册】修复文件管理器图标缺失的问题 ●【用户手册】修复关于窗口显示方角的问题 ●【用户手册】修复关于界面无版本号显示的问题 ●【系统监视器】修复服务设置启动方式失败的问题 ●【系统监视器】修复窗口最大化后显示错误的问题 ●【系统监视器】修复字体最大时,系统监视器内文字显示不全被遮挡的问题 ●【系统监视器】修复设置启动方式时报错失败的问题 ●【GB18030-2022】修复使用文本编辑器打开double4.txt文件显示的内容不符合标准GB18030-2022的问题 ●【GB18030-2022】修复复制test.txt中的字符串至文件名输入框内失败的问题 ●【扫描】修复在识别扫描仪时按enter键后扫描应用闪退的问题 ●【扫描】修复已扫描多张图片,左侧预览图可以左右拖动的问题 ●【网络连接】修复锁屏界面网络图标显示异常的问题 ●【截图】修复点击侧边栏截图按钮后屏幕显示异常的问题 ●【音乐】修复从mini窗口模式恢复后应用存在两层窗口标题栏的问题 ●【传书】修复点击右键菜单-打开目录后右键菜单不会消失的问题 ●【传书】修复传书任务栏缩略图空白且关闭按钮无悬浮效果的问题 ●【字体】修复恢复系统默认设置后字号大小与默认大小不一致的问题 ●【显示器】修复切换分辨率后注销重新进入系统后恢复默认分辨率桌面任务栏显示异常的问题 ●【锁屏】修复进入锁屏切换用户到其他用户,再切换回来后登录进入桌面过程中右下角弹出切换用户窗口的问题 ●【通知中心】修复用户1连接蓝牙后切换用户2,用户2会产生多条蓝牙通知的问题 ●【U盘管理工具】修复错误提示框文字字体调整异常的问题 ●【WPS】修复平板模式下无法关闭WPS应用的问题 ●【天气】修复雨天气图标在主页显示为黑色的问题 ●【工具箱】修复关于界面的“关闭”按钮的汉化问题 ●【wayland】修复使用手势无法唤出侧边栏的问题 ●【wayland】修复锁屏界面平板模式切换横竖屏后软键盘下方显示不全的问题 ●【wayland】修复平板模式下偶现扫描应用的窗口未最大化的问题 ●【wayland】修复录音应用切换至迷你模式后多一个标题栏的问题 ●【wayland】修复平板模式下录音窗口未全屏化显示的问题 ●【wayland】修复右键点击右下角时间,弹出菜单显示异常的问题 ●【wayland】修复无法调整任务栏位置为"上"的问题 ●【wayland】修复截图关于界面和另存为界面标题栏图标和开始菜单任务栏截图图标不一致的问题 ●【wayland】修复打开任务栏蓝牙窗口时多任务视图中会显示该窗口的问题 ●【wayland】修复截图右键窗口出现位置不固定的问题 ●【wayland】修复看图菜单栏显示位置异常且存在多余标题栏的问题 ●【RISC-V】切换平板模块后,黑屏,断电重启后只有桌面背景图或黑屏 ●【RISC-V】修复快捷键语音助手未汉化,Win+Q不可用的问题 ●修复平板模式下终端窗口工具栏无法使用的问题 ●修复屏保时空格键无法唤醒登录密码输入框的问题 ●修复更新升级后看图无法运行的问题 ●修复kylin-connectivity更新报错的问题

优秀的个人博客,低调大师

Zadig + Gitee:完美实现微服务架构持续交付

概述 Gitee.com(码云) 是开源中国推出的代码托管平台,支持 Git 和 SVN,目前已有超过 800 万的开发者选择 Gitee,随着 Zadig 社区小伙伴对 Gitee 呼声越来越高,在刚刚发布的 Zadig V1.11.0 版本中正式加入了对 Gitee 代码源的支持,同时结合 Zadig 强大的环境管理能力和 Git Webhook 能力,可以帮助更多工程师高效、愉悦的交付。 本文将介绍 Gitee 仓库管理的项目如何在 Zadig 上快速搭建,下面以 microservice-demo 项目为例,该项目包含 Vue.js 前端服务和 Golang 后端服务,以下步骤包含从 Code 到 Ship 的整个过程的演示。 准备工作 案例源码 本案例所用代码及配置 fork 自 项目案例源码,主要包含: 服务 YAML 文件:服务 YAML 文件 服务源码及 Dockerfile 文件: Frontend:frontend 服务 Backend:backend 服务 接入 Gitee 代码源 新建 Gitee 第三方应用 点击 Gitee 账号头像 -> 设置 -> 数据管理 -> 第三方应用 -> 创建应用来新建应用程序。 配置 Gitee 第三方应用 填写以下内容后点击创建: 应用名称:zadig,也可以填写可识别的任一名称。 应用主页:http://[koderover.yours.com] 应用回调地址:http://[koderover.yours.com]/api/directory/codehosts/callback 上传 LOGO: 上传符合格式和大小的图片 权限: 勾选projects、pull_requests、hook、groups 注意:应用回调地址中 koderover.yours.com 需要替换为 Zadig 系统部署的实际地址 获取 Client ID、Client Secret 信息 应用创建成功后,可获取该应用对应的 Client ID 和 Client Secret 信息。 将配置填入 Zadig 系统 切换到 Zadig 系统,管理员依次点击 系统设置 -> 集成管理 -> 代码源集成 -> 点击添加按钮。 依次填入如下已知信息: 代码源:此处选择 Gitee Client ID:上一步中获取的 Client ID Client Secret:上一步中获取的 Client Secret 组织/用户名称:推荐填写 Gitee 账号的用户名,方便在 Zadig 系统中标识 Gitee 代码源的出处 信息确认无误后点击 前往授权,耐心等待,此时系统会跳转到 Gitee 进行授权。 点击 同意授权 后,跳转到 Zadig 系统,至此 Gitee 集成完毕。 项目配置 进入 Zadig 系统,点击 新建项目 -> 填写项目名称 microservice-demo -> 选择 K8s YAML 项目 -> 点击 立即创建 -> 点击 下一步。 新建服务并配置构建 新建服务 服务配置指的是 YAML 对这个服务的定义,Kubernetes 可以根据这个定义产生出服务实例。可以理解为 Service as Code。 Zadig 提供三种方式管理服务配置: 手工输入:在创建服务时手动输入服务的 K8s YAML 配置文件,内容存储在 Zadig 系统中。 从代码库同步:服务的 K8s YAML 配置文件在代码库中,从代码库中同步服务配置。之后提交到该代码库的 YAML 变更会被自动同步到 Zadig 系统上。 使用模板新建:在 Zadig 平台中创建服务 K8s YAML 模板,创建服务时,在模板的基础上对服务进行重新定义。 这里,我们使用手工输入的方式:点击 手工输入按钮 -> 填写服务名称 -> 填写服务 YAML 配置内容 -> 点击 保存按钮即可。 backend 服务的配置内容如下: apiVersion: apps/v1 kind: Deployment metadata: name: backend labels: app.kubernetes.io/name: demo app.kubernetes.io/instance: backend spec: selector: matchLabels: app.kubernetes.io/name: demo app.kubernetes.io/instance: backend replicas: 1 template: metadata: labels: app.kubernetes.io/name: demo app.kubernetes.io/instance: backend spec: containers: - name: backend image: ccr.ccs.tencentyun.com/koderover-public/backend:latest imagePullPolicy: Always command: - /workspace/backend ports: - protocol: TCP containerPort: 20219 imagePullSecrets: - name: default-registry-secret --- apiVersion: v1 kind: Service metadata: name: backend labels: app.kubernetes.io/name: demo app.kubernetes.io/instance: backend spec: type: NodePort ports: - protocol: TCP port: 20219 targetPort: 20219 frontend 服务的配置内容如下: apiVersion: apps/v1 kind: Deployment metadata: name: frontend labels: app.kubernetes.io/instance: frontend app.kubernetes.io/name: demo spec: replicas: 1 selector: matchLabels: app.kubernetes.io/instance: frontend app.kubernetes.io/name: demo strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 maxSurge: 1 template: metadata: labels: app.kubernetes.io/instance: frontend app.kubernetes.io/name: demo spec: containers: - name: frontend image: ccr.ccs.tencentyun.com/koderover-public/frontend:latest imagePullPolicy: Always ports: - protocol: TCP containerPort: 80 resources: limits: cpu: 1 memory: 512Mi requests: cpu: 100m memory: 100M imagePullSecrets: - name: default-registry-secret --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: frontend annotations: nginx.ingress.kubernetes.io/proxy-body-size: 100m labels: app.kubernetes.io/instance: frontend app.kubernetes.io/name: demo spec: rules: - host: {{.demo_domain}} http: paths: - path: / backend: serviceName: frontend servicePort: 80 --- apiVersion: v1 kind: Service metadata: name: frontend labels: app.kubernetes.io/instance: frontend app.kubernetes.io/name: demo spec: type: NodePort ports: - protocol: TCP port: 80 targetPort: 80 配置构建 配置后端服务构建:选择 backend 服务 -> 点击 添加构建 -> 填写构建配置和构建脚本后保存。 构建配置说明: 应用列表:选择go 1.13 代码信息:准备工作中 fork 的代码仓库 构建脚本如下: cd zadig/examples/microservice-demo/backend make build-backend docker build -t $IMAGE -f Dockerfile . docker push $IMAGE 同样的步骤为 frontend 服务配置构建并保存。 构建配置说明: 代码信息:准备工作中 fork 的代码仓库 构建脚本如下: cd zadig/examples/microservice-demo/frontend docker build -t $IMAGE -f Dockerfile . docker push $IMAGE 加入环境 点击向导的「下一步」。这时,Zadig 会根据你的配置,创建两套包括上述 2 个服务的环境以及相关工作流,如下图所示。 继续点击下一步完成向导流程。 点击完成向导,一个有 2 个微服务的项目、2 套环境、3 条工作流已经产生,项目概览如下。 工作流交付 使用工作流对环境中的服务进行部署更新,以 dev 环境为例操作步骤如下。 点击microservice-demo-workflow-dev工作流 -> 选择服务,点击「启动任务」运行工作流。 触发工作流后,可查看工作流运行状况,点击服务左侧的展开图标可查看服务构建的实时日志。 待工作流运行完毕,进入dev环境,可看到backend服务和frontend服务被部署更新成功,镜像信息均被更新。 配置自动触发工作流 添加触发器,使得代码 Push commit、Pull Request、Push tag 都能自动触发服务的重新构建和部署。 配置工作流 添加 Webhook 触发器 -> 打开 Webhook 开关 -> 添加配置 -> 填写配置 -> 保存配置 -> 保存对工作流的修改 改动代码,触发工作流 以 Pull Request 事件为例说明,提交 Gitee PR 修改源代码 切换到 Zadig 系统,查看工作流microservice-demo-workflow-dev,被自动触发执行 待工作流执行完毕,进入项目->microservice-demo->环境,可看到服务的镜像已被自动触发的工作流更新。 配置 IM 通知 配置工作流 添加通知 -> 参考IM 通知填写相关配置 -> 保存修改 工作流执行后,会自动将运行结果和环境、服务等信息推送到 IM 系统中,方便及时跟进 Zadig,让工程师更专注创造! 欢迎加入 开源吐槽群🔥 Zadig on Githubhttps://github.com/koderover/zadig Zadig on Giteehttps://gitee.com/koderover/zadig

优秀的个人博客,低调大师

持续定义Saas模式云数据仓库+BI

云数据仓库概述 今天和大家一起探讨一下我们Saas模式下云数据仓库加上商业智能BI能有什么新的东西出来。我们先来看一下云数据仓库的一些概述。预测到2025年, 全球数据增长至175ZB, 中国数据量增长至48.6ZB。数据量暴涨这个前提下,我们看一下BI市场规模的增长。预测到2023年,我们中国BI软件市场年复合增长率为32%。云计算也同样在增速发展,2019年第四季中国云数据市场的增长率已经达到66.9%。 云数据仓库可以让企业几分钟内创建并开始使用数据仓库服务,在更低的成本下,专注业务,通过对大规模数据进行多样化的处理、挖掘、分析,快速获得业务洞察。它有四大特点:大规模数据分析,高性能,灵活扩容,低成本。 BI使用场景与趋势 商业智能(BI,Business Intelligence)是一种以提供决策分析性的运营数据为目的而建立的信息系统。随着我们社会发展以及数据量的爆发,在这么大量的数据支持之下,企业希望能快速从这些数据里边挖掘出更科学的一些数据,然后对我们的企业有一个科学化和数据化决策的帮助力。同时,BI也会助力企业用到一个精细化运营,客户关系维护,还有成本控制等。我们看一下商业智能建立一个信息系统它主要的一个流程。首先是数据接入,将分散于我们企业内外各种数据集成和进行整合。然后再进入一个数据准备阶段,就是一个ETL的阶段。然后再到一个数据分析的阶段,最后将这些成果交给决策层,决策层就可以通过这数据进行一些决策。不管是精细化运营,还是客户维护关系,还是成本控制,都可以从这些数据里边得到一些助力。 随着数据量的暴涨,我们的业务快速的增长,产生了各种分析需求。不仅仅是分析多样,而且还想要实时的,比如说秒级的即时查询。同时在这么大量的数据基础上,数据的安全合规也越来越受到重视。所以需要快速的整合多系统数据和实现信息透明,以及构建一个统一的简单易用的可视化分析平台,提高制表效率。这已经成为BI系统的新的趋势。 基于MaxCompute云数仓+BI的特性 MaxCompute(原ODPS)是一项大数据计算服务,它能提供灵活快速、完全托管、高性能、低成本、安全的PB级数据仓库解决方案,使您可以经济并高效的分析处理海量数据。基于MaxCompute云数据仓库的基本架构如下图所示。底层的集群是MaxCompute本身搭建好的,用户无需感知。再往上,有多种的计算引擎。引擎之上提供各种的API,还有深度的集成了一个一站式大数据智能云研发平台DataWorks。在云数据仓库的这么一个体系下,可以做数据准备,进行各种清洗、加工、分析之后,就可以进入一个数据消费的阶段。 总结一下MaxCompute云数仓的特性。第一,是一个开箱即用的在线服务。免平台运维,总体拥有成本低。第二,极致弹性能力。弹性扩展,无需容量规划即可应对业务规模的快速变化。第三,简单易用,多功能计算服务。多种计算模型,多种数据通道,外部数据源联邦计算。第四,企业级安全能力。多租户安全保障机制,细粒度授权,数据加密、脱敏,备份恢复。第五,生态融合。支持多样数据源、生态工具和标准。 基于MaxCompute云数据仓库,我们和BI工具是如何对接的呢。MaxCompute主要是一个存储和计算服务,加上一个数据开发平台DataWorks,组成了一个离线的云数据仓库。在这之上,深度的集成了一个阿里云的Quick BI。它是一个分析报表工具,直接连接一MaxCompute的数据表即可以自己对这个表进行分析。还有第三方的一些工具,帆软,Tableau。同时我们在生态这一方面,JDBC同样也是支持。还有一些企业、一些客户对于商业智能这一块有更加多样化的一个需求或者个性的需求,现有对接的这些工具有可能不支持,那么它也可以通过SDK的方式来连接,从而实现基于MaxCompute云数据仓库对接的一个商业智能的信息平台。 我们看一下MaxCompute离线数仓是怎么实现一个高性能低延迟的分析查询。它可以直接读取离线数仓,支持多样化的查询分析,包括一些简单的查询、复杂的查询、点查询、联邦查询等等。它底层也可以有丰富的数据源,通过MaxCompute + Hologres组成一个交互式分析。这么一个大数据生态下,它都可以无缝的对接。比如说Quick BI,Tableau,帆软。所以它可以做到很快的上手,通过这么一个组合我们可以很快速的实现一个企业的信息平台。 实践案例 接下来我们看一下几个实践案例。 新零售的一个行业案例,需求背景: 基于Hadoop开源生态打造,软硬件维护成本高昂,稳定性问题不断,严重影响业务经营分析;线上业务爆发,需求积压严重,期望有整体解决方案,能够快速灵活支持业务发展所需的技术扩展。通过这么一个大数据解决方案,直接用了阿里云的Quick BI这个产品,实现了快速数智化转型,拥抱新零售,降低TCO的同时,更好的依托云上生态,实现数据资产业务化闭环。最终新零售这个案例,基于我们的MaxCompute + DataWorks,提高了他的数据业务的开发效率。 我们再看一个新金融的案例。需求背景:金融业务数据,对安全管控有极强要求,需要一个完整的安全管理体系,同时还要满足个性化安全需求;业务快速发展,需要能快速搭建、成本低、秒级扩展的数据中台体系。我们给客户创造的价值:基于MaxCompute开箱即用的应用满足其在安全审计过程中的数据安全需求,缩短了需求响应时间并满足其在数据安全上的个性化需求。

优秀的个人博客,低调大师

稳定性持续增强,优麒麟 19.10.1 发布!

优麒麟开源操作系统通过研发用户友好的桌面环境以及特定需求的应用软件,为全球用户提供更稳定更易用的 Linux 开源桌面操作系统。 此次发布的优麒麟 19.10.1 版本为更新版本,内核版本升级至5.3.0.19.22, 火狐浏览器升级至70.0 版本,部分底层库也进行了升级,新增控制面板中图标主题设置、字体高级设置,同时修复了用户通过论坛、微信、官网等平台反馈的问题。 图标主题设置 控制面板新增自动搜索系统图标功能,轻松实现自定义自己的桌面主题图标,让自己的桌面变得个性十足。 字体高级设置 控制面板新增字体高级设置,功能和麒麟助手的字体设置非常相似,可以快速设置或切换字体、字号和字型,也可以一键恢复到默认设置。 更多优化及更新如下: 优化系统启动时间; 修复关机/注销时弹出“ at-spi-bus-launcher 无响应”问题; 修复开机字符界面版本显示错误问题; 更新多国语言翻译; 优化网络插件; 控制面板新增图标主题设置; 控制面板新增字体高级设置; 控制面板替换qt原生单例模式实现; 控制面板双屏拖拽后的显示屏偏移量算法实现; 控制面板新增系统动态获取主题设置。 目前,优麒麟 19.10 更新版本已进入四大开源境像站,优麒麟用户和其他 Linux 爱好者均可以通过境像站或优麒麟官网http://www.ubuntukylin.com/downloads/在线下载安装。已装 19.10 正式版的用户也可以通过终端运行命令更新到升级版: sudo add-apt-repository ppa:ubuntukylin-members/19.10 sudo apt update sudo apt upgrade

优秀的个人博客,低调大师

标记(TAG)您的阿里云资源【持续更新】

支持标签产品及其帮助文档汇总(截止目前) 产品 支持资源 API接口 云服务器 ECS 支持的资源:- instance:ECS实例- disk:磁盘- snapshot:快照- image:镜像- securitygroup:安全组- volume:存储卷- eni:弹性网卡- ddh:专有宿主机- keypair:SSH密钥对- launchtemplate:启动模板 打标签:TagResources删标签:UntagResources查标签:ListTagResources 专有网络 VPC 支持资源:- VPC:VPC实例- VSWITCH:交换机实例- ROUTETABLE:路由表实例- EIP:弹性公网IP实例 打标签:TagResources删标签:UntagResources查标签:ListTagResources 云数据库Redis版 支持资源:- INSTANCE 打标签:TagResources删标签:UntagResources查标签:ListTagResources 内容分发网络CDN 支持资源:- DOMAIN 打标签:TagResources删标签:UntagResources查资源标签:DescribeUserTags查标签资源:DescribeTagResources 密钥管理服务 支持资源:- 密钥key 打标签:TagResources删标签:UntagResources查标签:ListTagResources 云数据库POLARDB 支持资源:- 集群 cluster 打标签:TagResources删标签:UntagResources查标签:DescribeDBClusters API网关 支持资源:- apiGroup- plugin- app 打标签:TagResources删标签:UntagResources查标签:ListTagResources 对象存储 OSS 支持资源:- bucket 标签增删改查:bucket-tagging 负载均衡SLB 支持资源:- instance 打标签:TagResources 删标签:UntagResources查标签:ListTagResources 云数据库RDS版 支持资源:- instance 打标签:TagResources 删标签:UntagResources查标签:ListTagResources 弹性容器实例ECI 支持资源:- ContainerGroup 打标签:CreateContainerGroup更新(改、删)标签:UpdateContainerGroup查标签:DescribeContainerGroups DDoS防护 支持资源:- instance 基于标签查询DescribeInstanceList 分析型数据库PostgreSQL版 支持资源:- instance 基于标签查询DescribeDBInstances 云企业网 支持资源:- cen 基于标签查询DescribeCens 智能接入网关 支持资源:- ccn 基于标签查询DescribeCloudConnectNetworks 漏洞扫描AVDS 支持资源:- asset 带标签创建AddAssets带标签过滤DescribeAssetsByTags添加标签AddAssetTags查询用户标签DescribeUserTags 文件存储 支持资源:- 文件系统 添加标签 AddTags删除标签 RemoveTags基于标签查询 DescribeTags cs 容器服务 支持资源- 实例 创建带标签 SSL 证书服务 支持资源- 证书 带标签查询DescribeOrderList oos 运维编排 支持资源- 模板- 执行 打标签: TagResources删标签:UntagResources查标签:ListTagResources bastionHost (堡垒机) 支持资源- 实例 官方标签帮助文档api 操作文档 dbaudit 数据库审计 支持资源- 实例 官方标签帮助文档api 操作文档 IMAGESEARCH图像搜索 支持资源- 实例 官方标签帮助文档 云数据库 HBASE 支持资源- 实例 官方标签帮助文档tag的openApi文档

优秀的个人博客,低调大师

如何在疲劳的JS世界中持续学习

作者简介 cnfi 蚂蚁金服·数据体验技术团队 本文翻译自《Stay updated in JS fatigueuniverse》,并对内容有所补充和修改。 部分内容参考《HOW TO KEEP UP TO DATE ONFRONT-END TECHNOLOGIES》 想要在“每天都有新事物冒出来”的前端世界中跟上步伐,眼下已经成为了一个艰巨的任务。 很多人都有这样的感觉:不需要几个月你的技术就会过时,全新的炒作、类库、框架总会让你迷失,面对这场比赛,你只能选择退出。 我的许多同事都想知道我是如何设法保持最新的状态,并且仍能完成我的日常工作。在这篇文章中,我将分享我的日常生活,并告诉你如何找到有用的信息。 关注大牛 我的许多资源来自twitter。去follow那些JavaScript社区的领袖们,可以让我很轻松的获取到有意思的东西,尽管找到这些人是多么地不容易。 由于我们非常关注开源社区,于是Github成了我的主要来源。 首先找到一个业界顶级的项目(比如React),点击“Contributors”标签,可以看到这些主要贡献者的档案。 他们中的一些人拥有twitter帐户,他们经常会发布一些有价值的信息。 业界大牛不完全名单 Addy Osmani 探索新项目 另一个巨大的信息来源地,是Github的“Explore”标签。那里有无尽的内容如“Topics”、“Trends”、“Resources”...,你完全可以呆上几天。 打开 github.com/trending 可以看到最新的趋势库和开发者。 你还可以根据语言和时间跨度(今天,本周,本月)对它们进行过滤。 看最好的资讯 我每天都会访问这些网站。 我喜欢他们,因为他们没有垃圾邮件,他们的所有内容都来自社区。 EchoJS www.echojs.com/ DailyJS medium.com/dailyjs/ Front-End Front frontendfront.com/ 另外,我也会订阅以下两个前端领域的技术刊物 ES.next News esnextnews.com/ Web Design Weekly web-design-weekly.com/ 怎么抽出时间? 很多人认为,白天忙于工作,晚上回家后又太累,所以根本无法抽出时间再去消化与工作相关的信息。当然我也不认为你应该在业余时间去做这件事。从“时间管理哲学”的角度看,这是一种非常糟糕的做法。 在我看来,在工作时间内去丰富你的内在是一种不错的方式。每天早上到达工作岗位后,我开始浏览新闻网站。 如果我发现一些有趣的事情,我会将它加入书签供以后阅读。毕竟我们并不是机器,一天的工作中通常会有几个休息的间隙。 即使没有,我也会每天花半小时来阅读这些书签链接。每天下班之前,我会简要浏览github的“Trends”页面,并start一些我认为有意思的项目。 我会在30分钟内回顾它们,在我的下一个POC中小试牛刀,甚至在工作中使用它们。 做一名贡献者 贡献可以成为一个很好的信息来源,同时也让你有能力亲自动手练习你所学到的东西。 你可以在Stack Overflow提出问题或者回答问题。在Github上提issue、提request、参与讨论等等,这将对你的知识和技能带来巨大的帮助。 总结出自己的学习方法 总结出一套自己的方法来跟上最新方向是很重要的. 来看看这些厉害的开发者们是怎么做的吧! Axel Rauschmayer: 我推荐读以下3个资源来跟上最新发展. 1.推特. 先关注些你认识的知名前端开发者, 比如你经常用的某个库的作者. 然后从他的关注列表里面去挖掘, 迟早你会看到一些有用的推特. 2.Echo JS是个 JavaScript 新闻站. 它的布局和Hacker News类似. 3.关注这些每周邮件(那啥: 我是 JavaScript 每周新闻的编辑). Alex Sexton: 我发现对我来说, 只有不断实践才能跟上最新发展. 我在推特上关注了很多前端界的人, 也读博客和编程界新闻, 但我发现实践比纯读更能学到东西. 当我想学一样东西的时候, 我就直接开始做项目, 然后从中不断学习, 理解核心概念. Addy Osmani: 为了知道前端界都在发生些什么, 我经常刷推特和 G+. 对于那些我经常使用的工具和库, 我会关注下作者的最新情况, 这样才能知道接下来会有什么发展. 关注下那些制定网络标准的人也很有好处, 这样你才能知道接下来的几年会有什么发展. Lea Verou: 有几个订阅源(feeds) 我天天都读 我关注了很多人, 包括 Web 标准的制定者, 以及开发浏览器的, 还有厉害的其他类别的开发者. 我偶尔会阅读标准, 有些很好理解而且是一手资讯, W3C邮件列表(W3C mailing lists) 也很有帮助: 你在新技术出现的那一刻就能开始学习他们, 甚至你可以影响到这些新技术的发展! 参加会议 End. 对我们团队感兴趣的可以关注专栏,关注github或者发送简历至'tao.qit####alibaba-inc.com'.replace('####', '@'),欢迎有志之士加入~ 原文地址:github.com/ProtoTeam/b… 原文发布时间为:2018年05月02日 原文作者:蚂蚁金服数据体验技术 本文来源: 掘金 如需转载请联系原作者

优秀的个人博客,低调大师

【Python面试题】【基础篇】持续更新中...

1、不错的面试题网站 http://www.codingonway.com/ https://github.com/revotu/python-interviews https://github.com/taizilongxu/interview_python 2、Python是如何进行内存管理的? Python GC主要使用 引用计数(reference counting)来跟踪和回收垃圾。在引用计数的基础上,通过 “标记-清除”(mark and sweep)解决容器对象可能产生的循环引用问题,通过 “分代回收”(generation collection)以空间换时间的方法提高垃圾回收效率。 3、垃圾回收机制 当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。 当两个对象a和b相互引用时,del语句可以减少a和b的引用计数,并销毁用于引用底层对象的名称。然而由于每个对象都包含一个对其他对象的应用,因此引用计数不会归零,对象也不会销毁。(从而导致内存泄露)。为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们。 4、引用计数机制 PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除、引用超出作用域或被重新赋值,它的ob_refcnt就会减少.引用计数为0时,该对象生命就结束了。 优点: 1. 简单 2. 实时性 缺点: 1. 维护引用计数消耗资源 2. 循环引用 5、标记-清除 基本思路是先按需分配,等到没有空闲内存的时候从寄存器和程序栈上的引用出发,遍历以对象为节点、以引用为边构成的图,把所有可以访问到的对象打上标记,然后清扫一遍内存空间,把所有没标记的对象释放。 6、分代回收 分代回收的整体思想是:将系统中的所有内存块根据其存活时间划分为不同的集合,每个集合就成为一个“代”,垃圾收集频率随着“代”的存活时间的增大而减小,存活时间通常利用经过几次垃圾回收来度量。 Python默认定义了三代对象集合,索引数越大,对象存活时间越长。 举例: 当某些内存块M经过了3次垃圾收集的清洗之后还存活时,我们就将内存块M划到一个集合A中去,而新分配的内存都划分到集合B中去。当垃圾收集开始工作时,大多数情况都只对集合B进行垃圾回收,而对集合A进行垃圾回收要隔相当长一段时间后才进行,这就使得垃圾收集机制需要处理的内存少了,效率自然就提高了。在这个过程中,集合B中的某些内存块由于存活时间长而会被转移到集合A中,当然,集合A中实际上也存在一些垃圾,这些垃圾的回收会因为这种分代的机制而被延迟。 7、内存池机制 Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。 Pymalloc机制。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。 Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的malloc。 对于Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。 8、函数参数 普通参数 即在调用函数时必须按照准确的顺序来进行参数传递。 def fun(name): print('Hello', name) fun('World')#Hello World 默认参数 即参数含有默认值,在调用函数时可以进行参数传递,若没有进行参数传递则使用默认值,要注意,默认参数必须在普通参数的右侧(否则解释器无法解析) def fun(name, age=1): print('Hello', name, age, '年') fun('World') # Hello World 1 年 元组参数,即 *args 参数格式化存储在一个元组中,长度没有限制, 必须位于普通参数和默认参数之后 def fun(name, age=1, *args): print('Hello', name, age, '年') # Hello World 1 年 print(args) # ('I', 'love', 'it') for i in args: print(i) fun('World', 1, 'I', 'love', 'it') 输出结果: I love it 字典参数,即 **kwargs 参数格式化存储在一个字典中, 必须位于参数列表的最后面 def fun(name, age=1, *args, **kwargs): print('Hello', name, age, '年') # Hello World 1 年 print(args) # ('I', 'love', 'it') for i in args: print(i) print(kwargs) # {'my': 'jack', 'like': 'girl'} for m in kwargs: print(m, ':', kwargs[m]) fun('World', 1, 'I', 'love', 'it', my='jack', like='girl') 输出结果: Hello World 1 年 ('I', 'love', 'it') I love it {'my': 'jack', 'like': 'girl'} my : jack like : girl 9、Python里面如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别) 赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。 浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变){1,完全切片方法;2,工厂函数,如list();3,copy模块的copy()函数} 深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变){copy模块的deep.deepcopy()函数} copy 仅拷贝对象本身,而不拷贝对象中引用的其它对象。 deepcopy 除拷贝对象本身,而且拷贝对象中引用的其它对象。代码实例 import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy.copy(a) #对象拷贝,浅拷贝 d = copy.deepcopy(a) #对象拷贝,深拷贝 a.append(5) #修改对象a a[4].append('c') #修改对象a中的['a', 'b']数组对象 print 'a = ', a print 'b = ', b print 'c = ', c print 'd = ', d 输出结果: a = [1, 2, 3, 4, ['a', 'b', 'c'], 5] b = [1, 2, 3, 4, ['a', 'b', 'c'], 5] c = [1, 2, 3, 4, ['a', 'b', 'c']] d = [1, 2, 3, 4, ['a', 'b']] 10、Python中重载 函数重载主要是为了解决两个问题: 1. 可变参数类型 2. 可变参数个数 解释一: 那么对于情况 1 ,函数功能相同,但是参数类型不同,python 如何处理?答案是根本不需要处理,因为 python 可以接受任何类型的参数,如果函数的功能相同,那么不同的参数类型在 python 中很可能是相同的代码,没有必要做成两个不同函数。 那么对于情况 2 ,函数功能相同,但参数个数不同,python 如何处理?大家知道,答案就是缺省参数。对那些缺少的参数设定为缺省参数即可解决问题。因为你假设函数功能相同,那么那些缺少的参数终归是需要用的。 鉴于情况 1 跟 情况 2 都有了解决方案,python 自然就不需要函数重载了。 解释二: 简单来说,Python中为什么不需要重载,重载要解决的是参数类型和参数个数的问题,对于类型,python不像是c语言整型要写int,字符串要写str,,,这些python都不需要。 那么需要解决的就是传递参数个数问题,此时python可以传递列表呀,字典呀,可以使用*arg和**args呀,所以python根本不需要重载。 11、Python中单下划线和双下划线 __foo__:一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突. _foo:一种约定,用来指定变量私有.程序员用来指定私有变量的一种方式. __foo:这个有真正的意义:解析器用_classname__foo来代替这个名字,以区别和其他类相同的命名. 12、 __new__和__init__的区别 1. __new__是一个静态方法,而__init__是一个实例方法. 2. __new__方法会返回一个创建的实例,而__init__什么都不返回. 3. 只有在__new__返回一个cls的实例时,后面的__init__才能被调用. 4. 当创建一个新实例时调用__new__,初始化一个实例时用__init__. 13、单例模式 该模式的主要目的是确保某一个类只有一个实例存在 使用模块 其实,Python 的模块就是天然的单例模式, 因为模块在第一次导入时,会生成 .pyc 文件,当第二次导入时,就会直接加载 .pyc 文件,而不会再次执行模块代码。因此,我们只需把相关的函数和数据定义在一个模块中,就可以获得一个单例对象了。 # mysingleton.py class My_Singleton(object): def foo(self): pass my_singleton = My_Singleton() 将上面的代码保存在文件 mysingleton.py 中,要使用时,直接在其他文件中导入此文件中的对象,这个对象即是单例模式的对象 # to use from mysingleton import my_singleton my_singleton.foo() 使用类class Singleton(object): def __init__(self): pass @classmethod def instance(cls, *args, **kwargs): if not hasattr(Singleton, "_instance"): Singleton._instance = Singleton(*args, **kwargs) return Singleton._instance 基于__new__方法实现(推荐使用,方便) 当我们实例化一个对象时,是先执行了类的__new__方法(我们没写时,默认调用object.__new__),实例化对象;然后再执行类的__init__方法,对这个对象进行初始化,所有我们可以基于这个,实现单例模式 当我们实现单例时,为了保证线程安全需要在内部加入锁,未加锁部分并发执行,加锁部分串行执行,速度降低,但是保证了数据安全 import threading class Singleton(object): _instance_lock = threading.Lock() def __init__(self): pass def __new__(cls, *args, **kwargs): if not hasattr(Singleton, "_instance"): with Singleton._instance_lock: if not hasattr(Singleton, "_instance"): Singleton._instance = object.__new__(cls) return Singleton._instance 14、创建字典的方法 直接创建 dict = {'name':'earth', 'port':'80'} 工厂方法 items=[('name','earth'),('port','80')] dict2=dict(items) fromkeys()方法 dict1={}.fromkeys(('x','y'),-1) dict={'x':-1,'y':-1} dict2={}.fromkeys(('x','y')) dict2={'x':None, 'y':None} 15、数组和元组之间的区别是什么? 相同点 首先,列表与元组都是容器,是一系列的对象; 其次,二者都可以包含任意类型的元素甚至可以是一个序列。 不同点 列表和元组的“技术差异”是,列表是可变的,而元组是不可变的。 16、Python都有那些自带的数据结构? Python自带的数据结构分为可变的和不可变的。 可变的有: 集合 字典 不可变的有: 字符串 元组 数字 数组 17、推导式 列表(list)推导式 功能:是提供一种方便的列表创建方法,所以,列表解析式返回的是一个列表 例子: >>> li=[i*2 for i in range(10) if i % 2 == 0] >>> print li [0, 4, 8, 12, 16] 列表解析式最擅长的方式就是对整个列表分别做相同的操作,并且返回得到一个新的列表 字典(dict)推导式 集合(set)推导式 功能:集合推导式跟列表推导式差不多,都是对一个列表的元素全部执行相同的操作,但集合是一种无重复无序的序列 区别:跟列表推到式的区别在于:1.不使用中括号,使用大括号;2.结果中无重复;3.结果是一个set()集合,集合里面是一个序列 >>> squared={i*2 for i in [1,1,2]} >>> print squared set([2, 4]) 18、Python是如何进行类型转换的? Python提供了将变量或值从一种类型转换成另一种类型的内置函数。比如int函数能够将符合数学格式数字型字符串转换成整数。否则,返回错误信息。 19、Python是如何被解释的? Python是一种解释性语言,Python解释器会将源代码转换成中间语言,之后再翻译成机器码再执行。 20、.Python中的负索引是什么? Python中的序列索引可以是正也可以是负。如果是正索引,0是序列中的第一个索引,1是第二个索引。如果是负索引,(-1)是最后一个索引而(-2)是倒数第二个索引。 21、Python的参数传递是值传递还是引用传递 1).Python的参数传递有: 位置参数 默认参数, 可变参数, 关键字参数 2).函数的传值到底是值传递还是引用传递,要分情况 a. 不可变参数用值传递: 像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能在原处改变不可变对象 b. 可变参数是用引用传递的 比如像列表,字典这样的对象是通过引用传递,和C语言里面的用指针传递数组很相似,可变对象能在函数内部改变. 22、Xrange和range的区别是什么? xrange 函数说明:用法与range完全相同,所不同的是生成的不是一个数组,而是一个生成器。 >>> range(5) [0, 1, 2, 3, 4] >>> xrange(5) xrange(5) >>> list(xrange(5)) [0, 1, 2, 3, 4] 23、单引号,双引号,三引号的区别 1),单引号和双引号主要用来表示字符串 区别: 若你的字符串里面本身包含单引号,必须用双引号 比如:"can't find the log\n" 2).三引号 三单引号:'''python ''',也可以表示字符串一般用来输入多行文本,或者用于大段的注释 三双引号:"""python""",一般用在类里面,用来注释类 24、类和实例 https://www.cnblogs.com/crazyrunning/p/6945183.html 25、类变量和实例变量 实例变量是对于每个实例都独有的数据,而类变量是该类所有实例共享的属性和方法。 class Dog: kind = 'canine' # class variable shared by all instances def __init__(self, name): self.name = name # instance variable unique to each instance 类Dog中,类属性kind为所有实例所共享; 实例属性name为每个Dog的实例独有。 26、类对象和实例对象 类对象 类对象仅支持两个操作: 实例化;使用instance_name = class_name()的方式实例化,实例化操作创建该类的实例。 属性引用;使用class_name.attr_name的方式引用类属性。 实例对象 实例对象是类对象实例化的产物,实例对象仅支持一个操作: 属性引用;与类对象属性引用的方式相同,使用instance_name.attr_name的方式。 27、属性绑定 我们说的属性绑定,首先需要一个可变对象,才能执行绑定操作,使用objname.attr = attr_value的方式,为对象objname绑定属性attr。 这分两种情况: 若属性attr已经存在,绑定操作会将属性名指向新的对象; 若不存在,则为该对象添加新的属性,后面就可以引用新增属性。 类属性绑定 类属性的绑定发生在两个地方: 类定义时; 运行时任意阶段。 在类定义中,类属性的绑定并没有使用objname.attr = attr_value的方式,这是一个特例,其实是等同于后面使用类名绑定属性的方式。 因为是动态语言,所以可以在运行时增加属性,删除属性。 实例属性绑定 与类属性绑定相同,实例属性绑定也发生在两个地方: 类定义时; 运行时任意阶段。 类实例有两个特殊之处: __init__在实例化时执行 Python实例调用方法时,会将实例对象作为第一个参数传递 因此,__init__方法中的self就是实例对象本身 28、属性引用 类属性引用 类属性的引用,肯定是需要类对象的,属性分为两种: 数据属性 函数属性 实例属性引用 使用实例对象引用属性稍微复杂一些,因为实例对象可引用类属性以及实例属性。但是实例对象引用属性时遵循以下规则: 总是先到实例对象中查找属性,再到类属性中查找属性; 属性绑定语句总是为实例对象创建新属性,属性存在时,更新属性指向的对象。 29、 Python 中的 is 和 == is is the identity comparison. #比较引用是否相同 == is the equality comparison. #比较内容是否相同 python中新建变量时,并不需要指定类型,因为每个变量实际上存储的是一个引用,就是指向一个对象实体的指针。 is 判断的就是这个指针的值是否相同,如果相同则表示两个变量指向同一个对象实体。 而==则比较它们的内容是否相同 30、isinstance 和 type 的区别 class A : pass class B ( A ): pass isinstance ( A (), A ) # returns True type ( A ()) == A # returns True isinstance ( B (), A ) # returns True type ( B ()) == A # returns False 区别就是: type()不会认为子类是一种父类类型。 isinstance()会认为子类是一种父类类型。 31、

优秀的个人博客,低调大师

jenkins+git+maven+docker持续集成部署

环境准备: 安装centos7.1系统,最小化安装 设置好网络和防火墙 网络需要能访问外网, ip 192.168.1.7 下面关闭防火墙 setenforce 0 systemctl stop firewalld systemctl disable firewalld sed -i 's/enforcing/disabled/g' /etc/selinux/config 设置yum源 cd /etc/yum.repos.d/ wgethttp://mirrors.aliyun.com/repo/Centos-7.repo wgethttp://mirrors.aliyun.com/repo/epel-7.repo yum -y install epel-release 安装应用:docker+git+maven+jenkins 安装docker yum install docker -y 修改docker配置 vi /etc/sysconfig/docker #OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false' #if [ -z "${DOCKER_CERT_PATH}" ]; then # DOCKER_CERT_PATH=/etc/docker #fi OPTIONS='--insecure-registry=192.168.1.7:5000' 启动docker systemctl start docker systemctl enable docker 创建镜像仓库 docker pullregistry docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --name registry registry docker pull tomcat:7.0.70-jre7-alpine 安装git和maven yum install git -y yum install maven -y 配置git用户 cd ~ touch .git-credentials vi .git-credentials http://root:123456@192.168.1.7 http://admin:admin@192.168.1.7 http://admin:123456@192.168.1.7 git config --global credential.helper store git config --global user.name root git config --global user.email root@corpmail.com git config --list 建立git项目mybank-demo-maven cd /opt/ #新建初始化项目 git init --bare mybank-demo-maven.git 然后 cd /tmp/ git clone root@192.168.1.7:/opt/mybank-demo-maven.git #注意用户密码 cdmybank-demo-maven git clonehttps://github.com/nichochen/mybank-demo-maven #下载GitHub上的项目 mvmybank-demo-maven/* . rm -rfmybank-demo-maven 创建Dockerfile viDockerfile FROM tomcat:7.0.70-jre7-alpine ADD ./target/ROOT.war /usr/local/tomcat/webapps/mybank.war 1 2 3 4 5 6 [root@gluster01mybank-demo-maven] #ll 总用量16 -rw-r--r--.1rootroot901月400:33Dockerfile -rw-r--r--.1rootroot8301月319:53pom.xml -rw-r--r--.1rootroot1811月319:53README.md drwxr-xr-x.3rootroot40961月319:53src 将文件提交到git git add pom.xml git add README.md git add src git add Dockerfile git commit -m 'first commit' git push origin master 安装jenkins cd /etc/yum.repos.d/ wget -O /etc/yum.repos.d/jenkins.repohttp://pkg.jenkins-ci.org/redhat/jenkins.repo rpm --importhttps://jenkins-ci.org/redhat/jenkins-ci.org.key yum install jenkins -y yum install java -y yum install net-tools 修改端口为8081 vi /etc/sysconfig/jenkins JENKINS_PORT="8081" 启动jenkins /etc/init.d/jenkins start 在浏览器中输入:http://192.168.1.7:8081,效果如下 按照提示执行 cat /var/lib/jenkins/secrets/initialAdminPassword 得到Administrator password 接着设置账号密码 比如 admin:admin root:123456 进入主页面 登陆jenkins, 进入系统管理-插件管理-可选插件 搜索ssh plugin 和 Maven Integration plugin 然后安装, 安装界面选择安装好后重启jenkins 接着进入系统管理--系统设置 在系统设置中设置ssh 在上步中Credentials add添加用户密码 root :123456 并接着添加jenkins的url配置 系统设置的其他项可以保持不动,保存上面的修改 下面进行全局工具配置 配置其中的 jdk git maven yum安装的java 用命令查找路径 跟踪软连接 ll /usr/bin/javac ll /etc/alternatives/javac ll /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-5.b12.el7_4.x86_64/bin/javac jdk的home就是/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-5.b12.el7_4.x86_64/ git的是命令路径 maven和docker 用命令 mvn -v 查看home路径 Apache Maven 3.0.5 (Red Hat 3.0.5-17) Maven home: /usr/share/maven Java version: 1.8.0_151, vendor: Oracle Corporation Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-5.b12.el7_4.x86_64/jre Default locale: zh_CN, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-327.el7.x86_64", arch: "amd64", family: "unix" 新构建maven项目 名称为mybank 接着 下面git源码和add密码 root:123456 增加构建后操作 其中的num镜像数要多一个,要多tag一个有5000/mybank-tomcat辨识的镜像,第一次打包,要tag一个,以便于打包后是准确的v1版本 cd /var/lib/jenkins/workspace/mybank/ num=`docker images|grep "5000/mybank-tomcat"|wc -l` docker build -t mybank-tomcat:v$num . docker tag mybank-tomcat:v$num 192.168.1.7:5000/mybank-tomcat:v$num docker push 192.168.1.7:5000/mybank-tomcat:v$num docker run -d -p 8080:8080 mybank-tomcat:v$num 配置完成后保存 执行构建; 执行构建前,去服务器修改maven仓库路径 最好阿里云的镜像,增加如下配置,飞速下载 vi/etc/maven/settings.xml 1 2 3 4 5 6 <mirror> < id >alimaven< /id > <mirrorOf>central< /mirrorOf > <name>aliyunmaven< /name > <url>http: //maven .aliyun.com /nexus/content/repositories/central/ < /url > < /mirror > 构建成功并做成镜像后上传到docker仓库,最后启动镜像服务,日志截图 在服务器上查看生成情况 [root@gluster01 conf]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE 192.168.1.7:5000/mybank-tomcat v1 783463c71415 5 hours ago 150 MB mybank-tomcat v1 783463c71415 5 hours ago 150 MB [root@gluster01 conf]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 50769a5283c8 mybank-tomcat:v1 "catalina.sh run" 5 hours ago Up 5 hours 0.0.0.0:8080->8080/tcp sleepy_kowalevski 8fb688b7453d registry:latest "/entrypoint.sh /etc/" 2 days ago Up 6 hours 0.0.0.0:5000->5000/tcp registry 镜像服务正常,用浏览器访问服务正常 到此 一般的基础流程已经完成 如有兴趣可在git中添加秘钥认证 本文转自super李导51CTO博客,原文链接:http://blog.51cto.com/superleedo/2057841,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册