精华内容
下载资源
问答
  • 系统上线流程

    2019-09-18 07:28:09
    JIRA系统是否开通系统逻辑组件关系说明(图) ####逻辑组件软件版本说明 #### 系统硬件要求 ####系统互联网带宽要求日志输出格式及切割管理应用发布部署手册 ####测试验收报告应急处理方案及演练结果定时备份、归档...

    JIRA系统是否开通
    系统逻辑组件关系说明(图) ####
    逻辑组件软件版本说明 ####

    系统硬件要求 ####
    系统互联网带宽要求
    日志输出格式及切割管理
    应用发布部署手册 ####
    测试验收报告
    应急处理方案及演练结果
    定时备份、归档任务
    系统监控是否配置完成

    架构可用性、连续性、实用性的校验
    测试使用效果跟踪
    架构发布流程方式、操作手册
    监控标准化及覆盖度检查
    上线前的故障演练
    新系统 RSMS的信息 的登记
    应用部署上线手册检查
    …… 

    项目上线

    组件逻辑---》监控整理----》开发实现(监控)----》部署---演练-----上线。。

           与测试同步并行

    系统监控整理

    对日志信息监控:
    对业务日志:过滤ERROR/WARN/Exception 三个关键字
    nginx tomcat 程序进程端口监控
    系统cpu 网卡 内存 磁盘监控。。

    展开全文
  • 1. 背景分布式技术的发展深刻地...那么,针对复杂的分布式系统怎么保证软件质量和系统的稳定性?首先看下,传统软件产品活动的大致流程,简化流程大概是 3 大块:开发 -> QA -> 灰度上线一般如下图:流程有个...

    1. 背景

    分布式技术的发展深刻地改变了我们编程的模式和思考软件模式。分布式很好解决性能扩展,可靠性,组件可用性等问题,但是单机转变成分布式却加大了系统的复杂性,对于组件的开发,测试,部署,发布都提出更高的要求。那么,针对复杂的分布式系统怎么保证软件质量和系统的稳定性?首先看下,传统软件产品活动的大致流程,简化流程大概是 3 大块:

    开发 -> QA -> 灰度上线

    一般如下图:

    f8390f75b72a7220ec880433394f340d.png

    流程有个很大的问题,质量全靠 QA 测,对接全靠人力,沟通成本大,遗漏问题多,一般有几个常见的问题:

    1. QA 很难每次都测试全面,毕竟QA毕竟是人,人的主观因素太大,有时候人为判断觉得简单,不用测的地方很可能有漏了。或者觉得修改点太简单,觉得不至于出问题,就不再全面的测试。以至于可能会有基本功能问题;
    2. 测试速度慢,效率太低,QA 资源浪费,如果每次 QA 都需要全量的测试,那么重复工作太多,效率太低,效果也不好,对于这些重复工作,本可以更好,更快的解决,不至于 QA 就为了测试这么点东西,而没有精力去做更多的事情;
    3. 甚至说编译不过的代码都有可能遗漏到 QA;
    4. 闭环太慢,开发功能如果有问题,等到 QA 测出来,让后再反馈到开发这个闭环就太慢了。更不必说,问题漏到线上,再反馈到开发人员,那么戴江就更大了;
    5. 多个开发人员并行开发的时候,工作可能相互影响,小问题越积越多,功能集成的时候可能非常耗时;

    我们提出的改进点:

    1. 核心点之一:问题发现要早,发现越早,代价越小;
    2. 核心点之一:问题闭环要快,闭环越快,效率越高;
    3. 重复工作自动化,减少人的无效劳作;
    4. 多开发人员的时候,功能持续集成,问题拆小,提早发现;

    最核心的一点就是:”自动化闭环问题“。
    当前的复杂的软件系统对质量和效率提出了更高的要求,所以响应的软件活动必须要高度自动化才能达到要求。自动化触发、自动化测试、自动化闭环、自动化发布、自动化卡点等一系列的保证,一切能够事先预知且可固化的行为都应该自动化,把效率和质量提升,而让人去做更聪明的事情。

    cdb9490cbd1969e884acd3d2871402ee.png

    我们的思考:近些年来,对于自动化有 Continuous Integration,Continuous Delivery,Continuous Deployment 的一些理论和实践。这三者来说,突出“持续”二字,“持续”是为了达到“快”的目的,“快速迭代”,“快速响应”,“快速闭环”,“快”是核心竞争力。一般大家的共识流程分类如下:

    47f836ff933522caaed8381dfd328ac4.png

    对于开发者来说,接触到更多的是 Continuous Integration(持续集成),CI 把通过自动化,把流程固化下来,保证代码集成的有序、可靠,确保版本可控,问题可追溯,代码的活动中通过自动化,降低了人为主观的出错率,提高速度,提高版本质量和效率。

    2. CI 是什么?

    CI 即是持续集成(Continuous Integration),是当今软件活动中至关重要的一环。CI 一般由开发人员递交代码改动所触发,CI 在中间环境做自动化验证,CI 验证过后,即经过了基本质量保证,那么就可以允许下一的软件活动。
    持续集成说白了就是一种软件开发实践,即团队开发成员尽可能的快的集成,每次集成通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。因为问题发现
    越早,那么问题解决的成本就越少。
    一般来说,持续集成需要打通几个环节:

    • 代码提交(Git)
    • 任务构建(Jenkins)
    • 部署测试(Ansible,Shell,Puppet)
    • 划重点:CI 过程由代码活动触发。


    代码活动关注两个时间点:

    • Pre-Merge :代码改动合入主干分支前夕触发。集成的对象是代码改动与主干最新代码 Merge 之后的代码,目的是验证代码改动是否能够合入主干;
    • Post-Merge :代码改动合入主干分支之后触发。集成对象就是最新的主干分支代码,目的是验证合入改动代码之后主干是否能够正常工作;

    Pre-Merge 和 Post-Merge 关注点不同,缺一不可。差异在哪里?如果只有一个开发者,那么 Pre-Merge 和 Post-Merge 的测试对象是相同的。在多个开发者递交代码的时候,Pre-Merge 和 Post-Merge 就会呈现差异,他们的 CI 测试对象不同。

    3a2f24ed4f8f40d6d040aaa854febab8.png

    换句话说,Pre-Merge 是并行的,每个开发分支想要合入主干都会触发Pre-Merge CI,CI 的测试对象是 , Post-Merge 是串行的,测试对象永远都是最新的主干分支代码。

    3. CI 的四个思考

    559b46e681b99cc8ec662efa56c35de6.png

    3.1 CI 怎么触发?

    代码活动触发:
    一般有两个触发点,Pre-Merge,Post-Merge ,分别是代码合入主干之前,主干代码合入之后。
    定时触发。

    3.2 CI 触发之后做什么?

    CI 触发了之后做什么?说白了就是构建任务做了啥,一般有几个流程:

    • Checkout,Pre-Merge 代码——校验 MR 合入是否合法;
    • 代码编译 —— 校验代码编译是否合法;
    • 静态检查 —— 校验静态语法是否合法;
    • 单元测试 —— 回归测试函数单元合法;
    • 冒烟测试 —— 简单测试系统是否正常;
    • 接口测试 —— 测试用户接口是否正常;
    • 性能基准测试 —— 测试性能是否符合预期;

    3.3 怎么闭环问题?

    先思考可能会有什么问题:

    • Pre-Merge 代码冲突;
    • 代码编译失败;
    • 静态检查失败;
    • 单元测试回归测试不通过;
    • 冒烟测试步通过,接口测试失败……

    递交一个代码 MR 递交可能遇到以上问题,那么怎么才能快速闭环这个问题呢?
    首先,得有手段通知到开发者。
    解决:

    • MR 的 comment,CI 活动失败之后,直接以评论的方式自动添加到 MR;
    • 邮件,触发的一次 MR ,失败了以邮件的方式发送到相关人;

    再者,得有手段让开发人员知道问题。
    解决:

    • 开发者知道自己的 MR 触发 CI 失败之后,得知道怎么去排查问题 —— 测试报告,比如单元测试失败,要有单元测试报告,接口测试失败要有接口测试报告;
    • 每次构建任务保留归档线索,以便排查;

    3.4 CI 构建活动输出什么?

    • 单元测试报告;
    • 接口测试报告;
    • 代码覆盖率报告;
    • 接口覆盖率报告;
    • 构建版本包(持续化部署需要);

    4. CI 平台选型

    一般对多数的公司来说,不需要自己研发一个 CI 平台,有很多优秀的开源 CI 平台工具,工具之间并没有绝对的差异优势,这里就不进行选型了,我们以一个 Jenkins 完整示例来说明 CI 的使用方法和技巧。代码仓库我们使用 Gitlab,CI 平台我们使用开源的 Jenkins 作为演示。一步步完成我们需要几大模块功能。
    平台选型:代码平台 Gitlab,CI 平台 Jenkins。

    5. CI 的流程实践

    CI 主要把关的是代码活动,一般有两个触发点:

    • 代码合入主干前,触发 CI 测试,目的是校验本次合入是否符合质量预期,如果不符合,那么不准代码合入主干;
    • 代码合入主干后,触发 CI 测试,目的是校验最新的主干分支是否符合质量预期。

    Pre-Merge 触发过程:

    • 开发代码递交 Merge Request ( github 上习惯叫做 PR,gitlab 上习惯叫做 MR )
    • MR 自动触发 CI 构建事件
    • 运行静态检查,Merge 检查,单元测试,冒烟测试,集成测试,全部通过之后,代码才允许 Merge 合入主干分支;
    • 进行下一步软件活动。

    Post-Merge 触发过程:

    • 管理员审核 Merge Request 通过,代码合入主干,触发 Post-Merge 事件;
    • CI 平台收到事件,自动进行 CI 构建;
    • 构建完成,进行下一步软件活动;

    6. Jenkins 平台构建

    6.1 Jenkins 平台搭建

    Jenkins 是 Java 程序开发的,安装是非常方便的,去官网上下载一个 war 包,然后后台拉起运行即可。运行命令如下:
    启动:

    nohup /usr/bin/java -jar jenkins.war --httpPort=8888 >> jenkins.log 2>&1 &

    这样 Jenkins 平台就拉起来了,超简单。6.1.1 初始化平台
    初始密钥:
    平台第一次搭建需要做一些配置,在日志里找到一个“初始密钥”注意一下提示:

    ***************************************************************************************************************************************************************************************Jenkins initial setup is required. An admin user has been created and a password generated.Please use the following password to proceed to installation:5ddce31f4a0d48b4b7d6d71ff41d94a8This may also be found at: /root/software/jenkins/workhome/secrets/initialAdminPassword***************************************************************************************************************************************************************************************

    这个是最初始的超级用户密码,待会配置的 Jenkins 时候会用上,所以赶紧拿个小本本记下。
    登录网页:
    现在打开浏览器,登录 jenkins 的网页,我们下面做 jenkins 的初始化:

    3ffe30d462edfea6d3aa597608135399.png

    点击 “Continue”,进行下一步,下一步就是定制一些插件安装了。
    第一次定制插件安装:
    这个是可选的,这个根据自己需求选择插件,为了省事,选第一种就好,之后也很方便在平台上下载插件。

    542cb52f1342693c43b1a75306389689.png

    安装插件过程(Jenkins 几乎完全由插件组装起功能):

    3489ba956b0d25a7bcd13e1bdea72b19.png

    更新成功的就会显示“绿色”。插件安装完之后,下一步就是配置第一个超级用户了。

    65c23ea509f01b166c444517021d248a.png

    配置完成之后,点击 "Save and Continue" ,最后一步,配置 url ,点击 finish 即可:

    c260cc015bf5af1f7d7d22dc13d676f9.png
    5c8626ab8379c64024268d3b6d254983.png

    现在基本配置已经完成,可以开始愉快的使用 Jenkins 了。

    1fcfcde9184c2a1e518ebd108a185cc4.png

    6.1.2 使用小技巧
    中文化配置:
    Jenkins 平台搭建好之后,默认的是英文的,在国内的话可能没必要,我们可以安装中文化插件来更友好的展示我们的 Jenkins。分两个步骤:
    步骤一:安装插件:”Locale“:

    "Manage Jenkins" -> "Manage Plugins" -> "Available"
    f458ea455d87bb189e6428c7b3c399f5.png

    步骤二:安装完之后,配置 Configure:

    9e8685dd2ccebf0d069f80af835ade9b.png

    6.2 Jenkins 插件安装

    6.2.1 插件更新地址
    这里推荐国内的插件源地址,因为官网的网络访问不是很稳定。比如以下是清华的镜像源。

    https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

    6.2.2 必备插件安装
    Jenkins 功能都是由插件提供,有些插件是必须配备的,才能提供完备的 CI 功能,比如流水线 Pipeline 。这里列举几大关键插件的使用方法。
    Pipeline:
    Jenkins 必备插件,流水线插件,能否非常方便的让你定义流程,调度节点,分配资源,处理结果等。
    blue ocean:
    Pipeline 的可视化插件,Pipeline 还是声明式代码编写,如果要能让人更方便的使用,那么需要一个可视化的工具,blue ocean 就是为此而生。
    junit:
    测试报告的一个解析插件,这也是一种较为通用的测试报告格式。
    Cobertura Plugin:
    覆盖率展示的一个插件。单测跑完,需要有手段知道覆盖率的情况,并且需要
    方便的闭环处理。

    • 显示覆盖率的情况;
    • 代码的覆盖详情,方便开发人员闭环处理(细化到每一行代码);

    GitLab:
    我们的演示以 Gitlab 作为例子,需要和 GitLab 进行交互,所以需要安装插件用来接受 GitLab 事件,并反馈 CI 结果。

    6.3 Jenkins 任务创建

    6.3.1 创建任务(item)
    item 就是 CI 的项目,item 由管理员静态创建配置好,触发起来就是 job 了。每触发一次,job 编号都是递增的。点击 New Item 创建一个”流水线“ 的项目。

    fd20ba0b1f9fe811ae3c34bbf7d1e7f4.png

    6.3.2 创建视图(view)
    View 是什么概念?View 可以把一些有业务意义的任务归纳起来,在一个列表中显示。可以点击 ”New View“ 进行创建。
    视图会展示 item ,你可以选择性
    勾选。

    6.4 Jenkins 流水线

    流水线框架是通过 Pipeline 脚本来描述流程,Pipeline 有两种创建方式,两种语法:

    • 声明式流水线语法
    • 脚本化流水线语法

    现在官方推荐的是声明式流水线语法。那么,声明式的语法是什么样子的?声明式语法特点之一:顶层必须以 pipeline {} 开始。

    7. Jenkins 和 Gitlab 交互

    这一步就是最关键的东西,Jenkins 搭建好了之后,如果只是一个孤岛平台,那么没有任何意义,它必须参与到软件开发流程中去才能发挥效果。交互示意图如下:

    fcd7d7caca66d0d54b44a02142d5b629.png

    我们看到,GitLab 的代码活动需要以事件的形式触发 Jenkins,Jenkins 执行完一系列活动之后,需要把结果反馈到 GitLab,并且能够影响到 GitLab 的下一步活动,所以 GitLab 和 Jenkins 需要相互配置关联。

    7.1 Gitlab 配置

    为什么需要配置 Gitlab ?因为需要打通 Gitlab 到 Jenkins 的路。Gitlab 作为代码仓库,主要产生项目代码相关的事件,比如 Merge Request,Push Commit 等,当 Gitlab 产生这些事件的时候,需要自动把这个事件推送给 Jenkins ,这样就打通了触发交互。7.1.1 配置 Web Hook 事件

    011e6613bde9d84168514cecd247e29e.png

    操作步骤:

    • 打开代码仓库
    • 点击 setting -> integrations
      填入 URL填入 Secret Token勾选 Trigger 事件URL 和 Secret Token 怎么来的?这个是对应到 item 。

    在 Jenkins 平台上,打开对应的 item,打开 Configure ,勾选 Build Triggers ,找到 ”Build when a change is pushed to GitLab“ ,就是这个了。

    662c24425a5ee7783ba9cf9b086bf91c.png

    再往下有一个 Secret token ,点击 Generate 。

    d16125651e0c2a595d0253a4521cc58c.png

    把这两个正确填写好,那么就能打通第一个环节了:GitLab 到 Jenkins 的触发。填写完之后,可以由 GitLab 发个测试事件测试下。

    0e4c60780d9d117c3dfa447a0570109a.png

    返回 200 即是成功了。7.1.2 配置 Pre-Merge 卡点
    代码 Pre-Merge CI 没过不让合入主干 这个功能怎么实现?关键是 GitLab 要支持代码 Merge 前夕的 Hook 行为。

    • 首先,我们约定一个行为规范:所有合入主干的代码必须递交 MR,MR CI 测试通过才可以合入主干;
    • 其次,勾选 Settings -> General -> Merge requests ,把 ”Only allow merge requests to be merged if the pipeline succeeds“ 勾选上。

    7.2 Jenkins 配置

    Jenkins 主要看 Pipeline 的配置,Pipeline 配置打开 Configure 如下:

    323bc5b0dfe62f2163f6826078bd639a.png

    看一个完整的 pipeline 架子定义各个阶段(可以直接把这个拷贝,运行看下效果):

    pipeline {agent anystages {    stage('代码checkout') {        steps {            echo "------------"        }    }    stage ("静态检查") {        steps {            echo "------------"        }    }    stage ("代码编译") {        steps {                         echo "------------"        }    }    stage ("单元测试") {        steps {            echo "------------"        }    }    stage ("打包") {        steps {            echo "------------"        }    }    stage ("冒烟测试") {        steps {            echo "------------"        }    }    stage ("集成测试") {        steps {            echo "------------"        }    }    stage ("基准性能测试") {        steps {            echo "------------"        }    }}post {    always {        echo "------------"    }    success {        echo "------------"    }    failure {        echo "------------"    }    unstable {        echo "------------"    }}} 

    跑出来的效果:

    92907333360207272bb91658ee7662bf.png

    Blue Ocean 的效果:

    aa8c55e5952e263a9b4aa07eef918cb4.png

    接下来,我们拆解几个关键的阶段来分析。7.2.1 代码 checkout
    Checkout 的代码也就是我们的测试对象,这个对于 Pre-merge 和 Post-merge 是不同的,Pre-merge 卡点由 Merge Request 事件触发,我们需要 Checkout 出 ”代码修改“ + ”最新主干分支“ 的代码。Post-merge 相对简单,我们只需要 Checkout 出最新的主干分支即可。怎么做?
    Pipeline 直接支持这个使用。

    stage('代码checkout') {steps {    dir(path: "${你想要放置的代码路径}") {        checkout changelog: true, poll: true, scm: [            $class: 'GitSCM',             branches: [[name: "*/${env.gitlabSourceBranch}"]],            doGenerateSubmoduleConfigurations: false,             extensions: [                [$class: 'PreBuildMerge', options: [fastForwardMode: 'FF', mergeRemote: 'origin', mergeStrategy: 'DEFAULT', mergeTarget: "${env.gitlabTargetBranch}" ]],                [ $class: 'UserIdentity', email: "${env.gitlabUserEmail}", name: "${env.gitlabUserName}" ]            ],            submoduleCfg: [],            userRemoteConfigs: [[                credentialsId: "${env.OCS_GITLAB_CredentialsId}",                 url: "${env.gitlabSourceRepoHttpUrl}"            ]]        ]    }                }            } 

    这里指明:

    • 代码 checkout 下来放置的路径(dir path 配置);
    • 指明 checkout 的分支,MR 事件触发 CI 的时候 env.gitlabSourceBranch 是会自动设置上的;
    • 指明 checkout 的行为,PreBuildMerge 行为(其实 Post-Merge 触发 PUSH 事件的时候,也适用于上面的写法);
    • 指明 GitLab 认证凭证(credentialsId);

    上面的语法同时适用于 Pre-merge 和 Post-merge 。7.2.2 静态检查
    静态检查主要是对代码语法做一些静态检查,比如 golang ,可以使用自带的 go vet ,或者 go fmt 等检查,经过这一轮检查就能保证大家的代码消除了最基本的语法和格式错误。
    7.2.3 单元测试
    对最小的函数做单元测试是必要的,经过单元测试可以拿到项目的一个覆盖率情况。这个阶段我们获得两个东西:

    • 单元测试案例报告
    • 覆盖率报告

    测试报告怎么拿?以 Golang 为例,跑单测的时候,把覆盖率的开关打开,标准输出到一个文件:

    go test -cover -coverprofile=cover.output xxx | tee ut.output

    这里会产生两个文件:

    • ut.output :用来生成单元测试报告的文件;
    • cover.output :用来生成覆盖率报告的文件;

    单测报告生成:
    首先解析这个文件
    xml 格式的文件,然后用 junit 上报给 jenkins 展示。

    sh "go-junit-report  ut.xml"junit 'ut.xml'

    go-junit-report 哪里来的?这是个开源的工具,就是专门用来做单元测试解析的。
    在 Jenkins 上展示的效果如下:

    9936185c58373c588a2bb0404dee6d84.png

    覆盖率报告生成:
    解析覆盖率输出文件,生成一个xml 文件:

    gocov convert cover.output | gocov-xml > cover.xml

    上报这个 xml 文件,用于 Jenkins 平台展示:

    step([    $class: 'CoberturaPublisher',     autoUpdateHealth: false,     autoUpdateStability: false,     coberturaReportFile: '**/cover.xml',     failUnhealthy: false,     failUnstable: false,     maxNumberOfBuilds: 0,     onlyStable: false,     sourceEncoding: 'ASCII',     zoomCoverageChart: false])
    f1ae793eb1e6c7de69bc59ef9dafbe71.png

    点击进文件,可以看到代码覆盖的详情:

    738e9160cf2068b0b45b02a82352511a.png

    7.2.4 接口测试
    对完整的系统做一些接口级别的测试,比如模拟用户行为,测试用户调用的接口,这样能保证最基本的功能。报告输出也可以用 junit 格式,可以上报给 Jenkins,解析如图:

    ecd81e7cc82d7058e3181d2dc2a7576f.png

    7.2.5 邮件发送
    测试通过或者失败,需要发送有结果邮件。

    configFileProvider([configFile(fileId: '5f1e288d-71ee-4d29-855f-f3b22eee376c', targetLocation: 'email.html', variable: 'content')]) {script {template = readFile encoding: 'UTF-8', file: "${content}"emailext(  subject: "CI构建结果: ${currentBuild.result?: 'Unknow'}",  to: "test@test.com",  from: "push@test.com",   body: """${template}""")}} 

    7.2.6 GitLab 状态交互

    // 定义 Gitlab 流程options {gitLabConnection('test-gitlab')gitlabBuilds(builds: ['jenkinsCI'])}  // 触发gitlab pipeline  updateGitlabCommitStatus name: 'jenkinsCI', state: 'success'  addGitLabMRComment comment: """**CI Jenkins自动构建详情**| 条目 | 值 || ------ | ------ || 结果 | ${currentBuild.result?: 'Unknow'} || MR LastCommit | ${env.gitlabMergeRequestLastCommit} | | MR id | ${env.gitlabMergeRequestIid} || Message Title | ${env.gitlabMergeRequestTitle} || 构建任务ID | ${env.BUILD_NUMBER} || 构建详情链接 | [${env.RUN_DISPLAY_URL}](${env.RUN_DISPLAY_URL})"""

    CI 成功或失败,都需要把这个状态给到 GitLab,我们以一个 Comment 展示结果,并且附上 jenkins 任务的跳转链接,这样可以最快的帮助开发人员闭环。

    093800a4feb98ed5fe8a00ffd398236a.png

    成功才允许合入:

    82b8eef86aea64bfdb28baa59301c083.png

    Gitlab CI:

    fd948bfc2b3efa9813ca4391a73db3f2.png

    7.2.7 构建归档
    打包日志:

    // 先打一个 tar 包sh "tar -czvf log.tar.gz ${SERVICEDIR}/run/*.log"// jenkins 进行归档archiveArtifacts allowEmptyArchive: true, artifacts: "log.tar.gz", followSymlinks: false

    8. Jenkins 高级技巧

    8.1 资源互斥

    有时候多个任务跑的时候,可能会并发使用到某个资源,而如果这个资源有限,那么可能需要用到一些互斥手段来保证。比如,两个任务可能都用到了 mongodb,而 mongodb 如果只有一套,那么就必须让多个任务串行执行才行,不然就会跑错了逻辑。怎么做?
    这个可以在 “Configure System”->“Lockable Resources Manager” 定义好锁资源:

    82ab0f2b8b3fdfc319d8bc2c8dba576e.png

    然后再 Pipeline 脚本里使用这个锁资源:

    stage ("单元测试") {steps {    lock(resource: "UT_TEST", quantity:1) {        echo "====== 单元测试 ============"        echo "====== 单元测试完成 ============"         }}} 

    并且还可以在界面上( Dashboard -> Lockable Resources )看到哪些资源被哪些任务占用:

    c755445c46bc7cddd06183f3d5cfa568.png

    通过合理定义锁资源,我们就能做到任务可以并发,但是关键的竞态资源做互斥,这样 CI 构建任务更灵活,更有效率(这个可以类比成代码里面锁粒度的一个影响,如果你不用 Lock Resource 这种方式,那么很可能只能配置成 node 并发度为1才能保护到竞态资源)。

    8.2 节点调度

    Jenkins 允许你调度指定的任务到合适的节点。当有多个节点的时候,可能会想要任务 A 固定到 node1 上执行,那么可以使用 agent 命令指定。
    定义节点的时候每个节点都会赋有一个 label 名称,然后运行的时候,就可以指定节点了:

    agent { label "slave_node_1" } 

    8.3 节点间文件传输

    我们使用 stash, unstash 来实现, 下面的例子就是把 build/ 目录在 node1 和 node2 直接做无损传输:

    stage ("打包") {agent { label "slave_node_1" }steps {// 节点1上,把 Build 目录下的都打包;stash (name: "buildPkg", includes: "build/**/*")}}stage ("冒烟部署") {agent { label "slave_node_2" }steps {// 节点2上,解包unstash ("buildPkg")}} 

    8.4 节点的后置清理

    在流水线多节点切换的时候,需要注意下你所在的节点是哪个,千万别晕头了。

    pipeline {agent { label "master" }stages {    stage ("测试") {        agent { label "slave_node_1" }        steps {        }  // 阶段后置        post {            always {                // 清理 slave_node_1 的构建空间                cleanWs()            }        }    }}// 流水线总后置post {    always {  // 只清理 master 节点的构建空间        cleanWs()    }}} 

    多节点的时候,一定要记得分别清理节点。

    9. 总结

    通过使用合理的技术平台,把人与事合理的关联,现代软件开发活动中,CI 是必不可少的流程,开发人员身在其中,CI 以代码活动为起点,构建结果能能快速响应到对应人,并提供手段让对应人快速解决,最后提供直观的报告。我们通过 Jenkins(CI平台) + GitLab(仓库)来演示完整搭建流程,展示一个可实践的过程。一切都是为了软件开发效率和版本质量。

    展开全文
  • 中国邮政储蓄银行个人财富管理系统正式上线啦! 中国邮政储蓄银行致力于通过专业的财富管理团队为您提供全面的财富管理工具。通过行业内领先的个人财富管理系统,融合专家观点与智能算法,为您量身定制个性化、全...

    中国邮政储蓄银行

    个人财富管理系统正式上线啦!

    39721ccb613a001c12d5da5c40aaddc8.png

        中国邮政储蓄银行致力于通过专业的财富管理团队为您提供全面的财富管理工具。通过行业内领先的个人财富管理系统,融合专家观点与智能算法,为您量身定制个性化、全方位的资产配置方案,实现资产收益与投资风险的和谐平衡,助您实现人生财富目标。

        基于您个性化的投资需求量身定制《客户投资规划建议书》和《客户账户检视报告书》,为您的投资理财提供前瞻性的建议。

    d0bc3a5f0d8047e38e4efa408be6c58f.png

    邀您轻松体验资产配置全流程

    8939ec0d3fde15c406207a1b4f1fec00.png

    白金级及以上客户专享的财富私享专区

    也在手机银行正式上线啦!

    <>

    fa8faab040a99a18fc7ddfa02ae69fe3.pngb63c4b74c9fb36d059e7617c7dc1844a.png

    在哪里可以找到私享专区入口呢?

    <>

    2fe7cb24bd99221e1482fe0f0a29c67e.png0b748d793b488508d94951a1916eb070.png

    1.在VIP版本中,找到投资理财首页,就能找到财富私享专区;2.在普通版本中,找到投资理财首页,点击“更多”,就能找到财富私享专区。

    下面小邮就带大家体验下

    财富私享专区的几个强大功能

    功能1 · 财富体检

    您的财富体检报告新鲜出炉啦!

    快来一起看看吧!

    <>

    74cdec9386c2020e7fdd7d706571091a.png2e19ce77138f821c7acc7207d6b71e2f.png3e59625cdf762e0231a4d1d81edac4aa.png

    只要轻轻点击“财富体检”,小邮就会自动为您开启财富体检全面扫描,对您的大类资产持仓占比进行科学的打分评价,为您出具诊断建议。

    功能2 · 提交投资规划需求

    提交您的投资规划需求

    给您的专属理财经理!

    206ec9d8332415855ffa48a84e8b5af7.png

    投资规划需求提交页面会自动从系统中读取您的风险偏好,您可以选择重新规划一笔金额“全新规划”,或对您当前在我行持有的全部资产进行规划“持仓规划”。点击“提交需求”,您的专属理财经理就会接到您的投资规划需求,开始为您制作投资规划建议书啦!

    功能3 · 查看投资规划书

    可以看到理财经理为您完成的

    规划建议书啦!

    <>

    487516e61003449b4a3a314dce7d99ca.png6763c7546776d534e023d1b8afee2281.png

    进入财富私享专区,点击“财富规划”,就可以看到理财经理为您完成的规划建议书啦,轻轻点击红色的PDF小图标,就可以进行查看或下载。

    功能4 · 一键下单

    白金级及以上客户专享的财富私享专区

    也在手机银行正式上线啦!

    <>

    a109fe215e3abb1efb55822ec56a2116.pnge55178917bea46999a27bcedd4a5d522.png82b4a8761f28249e2758d1c2ed62300d.pnge7b8a41873b3ffd2d89c0d1732c9e49c.pngf8d28e9cdad5b6211fec8179bb26c58f.png

    (1)在财富规划页面,找到状态为“可购买”的组合,点击组合详情;

    (2)您可以勾选产品下单,支持修改购买金额、换卡等操作,点击合并购买;

    (3)进入交易准备页面,点击未完成的交易准备事项,跳转进相关流程,完成后返回交易准备页面,只要有产品序号完全被点亮,就可以点击继续,进行购买;

    (4)进入交易下单页面,勾选“我已阅读”,核对信息无误后点击“一键下单;

    (5)输入交易密码进行下单,返回交易结果。

    e47b73ba6f3fc7a099a73b1a85a98052.png

    长按下载手机银行app

    体验财富私享专区

    怎么样,看到这里是不是觉得小邮的功能很强大呢!

    更多精彩内容和尊享体验,尽在邮储银行财富私享专区,快来体验一下吧!

    展开全文
  • 浙江上线软件测评中心定做 dga55b69浙江上线软件测评中心定做 为了能够程度汽车的性与便捷性,在许多汽车上,会根据现实需要,络通信设备。”他指出,为那些在上与外界隔绝的嵌入式设备添加链接性与功能,增加了...

    浙江上线软件测评中心定做 dga55b69

    浙江上线软件测评中心定做 为了能够程度汽车的性与便捷性,在许多汽车上,会根据现实需要,络通信设备。”他指出,为那些在上与外界隔绝的嵌入式设备添加链接性与功能,增加了系统以及它们链接对象之攻击面。ITSF报告显示,过三分的业者并没有设置通报时程以取得效果,其中只有家订定了天的修正性问题期限。

    PC端有多款VM加密产品,而KVM是目前移动端仅有的VM加密产品。

    bb71a98f4b2b8efc224d556cd2f8b013.png

    速G络不仅可以人们相互联系的效率,还可以实现机器、物体和设备间更好的互连和控制。其G数据传输速率、低和容量,无论对消费者还是来说都是福音。但这一切伴随着新型重大风险,因为早期采用者仍处于学习和摸索阶段。

    新标准对移动APP获取用户或业务信息的、存储、传输和计算等方面进行了详细要求,但是对移动APP获取用户隐私信息的数量、途径和利用方式没有明确规定。

    01e62cc1038baab864f05ed55427364c.png

    巴恩斯敏锐地意识到,络问题,而所有这些问题在切换到G时将会被大幅放大。惠而浦与其G合作伙伴ATT共同解决这些隐忧。巴恩斯称:“我们每天都在跟这些问题缠斗。在开始前,我们与ATT谈论的个话题,是怎么打造一个的G网络。

    KVM为NDK插件模式,不改变原有流程,支持J、F等构建工具。

    5131dbfc771847585d3300aaffdc819c.png

    ”随着G的发展,络的智能设备数量预计将急剧增加,络的流量也将显著增长。G调查研究表明,设备的数量将增长至亿台,比今年预计的端点设备增长。络成为了攻击者的理想环境——可供的攻击目标比现在丰富得多。

    7cd35e3f08084e0f7f58cbe64d03d427.png

    浙江上线软件测评中心定做 汽车对通信、认证、加密等模块进行保护,防止汽车终端的TBOX程序被恶意分析,三方应用可利用漏洞越权控制汽车。

    加密算法和密钥保护针对终端本地部署的数据加密算法,比如AES,RSA,复合算法等以及本地密钥进行代码隐藏加密,防止算法被重构获取批量明文数据。

    巴恩斯表示,为解决此问题,惠而浦将加密G流量,并将G天线配置为仅接受经批准的流量。他说:“在添加设备的时候,我们在G网络上将之配置为可接受的设备。只要不在白名单上,我们不。而由于是加密的,我不担心有人试图捕获信,因为捕获了也没什么用。

    浙江上线软件测评中心定做 根据调查,的人至少进行了一次部署,而%的人表示他们正在使用,设备。目前新标准针对移动APP络,但在实际应用时存在使的情况。其中代码虚拟化功能凭借自定义CPU指令的特性,代码一旦加密,不解密,攻击者无法还原代码,分析核心业务逻辑。

    888816bb5249976cddcac806729f03ac.png

    ”BN研究员乔纳森·坦纳(JT)表示,事实上,问题尚未解决。他说,有些设备的问题无法通过固件更新来修复,或者没有更新固件的机制。即使设备制造商在下一代设备中加装功能,那些不的旧型仍然散落各处继续运行。

    因LIN、CAN络络,此外,与之配套的协议标准处于公开状态,并且还借助通信报文来进行分析与探测,因此,利用总线节点或OBD接口,相接入,便能ECU控制信息,或者是传感器采集信息,导致电子系统在实运行中出现紊乱情况。

    b0e5fc2f46001bf1efba2a73fb29f595.png

    a09b285e2cbcd3068b7591a63448fa79.png

    性集成静态、动态多项加固功能,并采用虚拟化保护,对抗各种反编译、逆向分析,防止反程序失效。

    浙江上线软件测评中心定做 后,发展,方面的文件、标准规范更是相应与印发。

    展开全文
  • 用友软件ERP项目验收报告模板 XXXX集团有限公司业务ERP系统实施项目从XX月XX日启动至今历时1个半月左右,在XXXX集团有限公司与XXXX有限公司双方领导的大力支持和关心下,XXXX公司咨询实施顾问和XXXX集团有限公司ERP...
  • 通过对次系统的进行各方面的可行性分析。可以得出以下的结论: (1). 针对某些有网上选购图书的用户,该系统是由... 综上所述,网上图书购买系统是一款能够提升用户图书选购体验的软件系统,可以进行本系统的开发。 ...
  • 本期头条 ...据了解,英国大区上线了众多云计算产品,包括弹性计算、云存储、数据库、网络、安全、管理、应用服务等等,可以满足英国当地、欧洲以及中国出海客户的需求。英国大区双可用区同时开服...
  • VoltDB 受到全球电信软件解决方案提供商的信赖,后者将其作为首选内存数据库来驱动他们部署在全球 100 多家运营商处的任务关键型应用。 VoltDB 受到青睐的原因在于其性能和功能不仅能够解决当前挑战,而且还能支持...
  • 专业工作岗位 调查报告 1ERP实施岗位基本信息 这一工作任务的性质是软件实施 从项目中标开始项目组就进 入到客户公司项目启动和系统规划后ERP实施的工作内容有系统 规划方案编写系统模拟系统测试上线准备上线支持...
  • CODING 软件研发管理系统在整合了便捷的持续集成功能和完整的测试管理模块后,即将在本月月底上线又一重磅功能──缺陷管理模块,进一步完善一站式 DevOps 工具链,提高 IT 团队研发效率,做到让开发更简单。...
  • 软件开发所有文档.zip

    2021-01-06 19:42:58
    软件开发所有文档.zip 包括 1 立项阶段:《项目建议书》《可行性研究报告》《可...8 集成测试阶段:《系统测试计划》《UAT测试报告》《测试分析报告》《验收测试报告》《性能测试报告》 9 上线阶段:《上线割接计划》
  • 软件测试流程

    2020-12-25 14:26:06
    4、测试执行阶段:提测后,搭建QA环境,先执行冒烟测试,然后进行系统测试,提交bug,跟踪bug,直到被测软件达到测试需求要求,测试结束; 5、测试评估阶段:出测试报告,对整个测试过程和版本质量做一个详细评估,...
  • 附件一 立项分析报告 附件二 业务需求说明书 附件三 系统需求规格说明书 附件四 需求变更申请 ...附件十七 系统上线计划 附件十八 系统验收评估报告 https://pan.baidu.com/s/1Wu-F_FK3RFZ1t0vZ1h7KIA 提取码:xd5e
  • 参与项目实施的整个流程,包括:项目准备、项目启动、需求调研、系统部署调试、系统测试、用户培训、系统上线等项目全周期交付过程管理; 2. 负责实施项目的管理,制定详细的软件项目实施计划和进度,分解项目; 3....
  • 2009 年,北京酷绅服装有限公司作为从 事团体和个人定制的现代化服装企业率先研发出在线定制系统软件,集研究、设计、服务、 生产和销售为一体,以 B2B 电子商务与物流的商业模式实现了中国传统服装定制模式向互 ...
  • 公司流程 软件分类

    2020-12-15 16:40:43
    测试:测试用例--测试用例评审(测试人员发起)--部署环境(linux)--冒烟 测试(通过)--提交bug--回归测试(测试报告)--验收测试--上线 2.软件测试分类 (1) 按照阶段:1.单元测试是指软件中的最小可测试单元进行...
  • ”中国信息通信研究院的报告认为,“因此,国家鼓励工业互联网首先在产业集聚区落地,通过财税支持、政府购买服务等方式鼓励中小企业业务系统向云端迁移。”工业互联网不可能一蹴而就,全国遍地开花。目前,
  • 软件测试基础

    2020-11-20 20:46:41
    需求)-------详细设计(开发人员)-------测试用例(测试人员)-----测试用例评审(开发,测试,项目经理,需求)-----编码------部署(测试环境)---------冒烟测试---------bug(禅道)------测试报告上线(运维...
  • 生产系统部署、上线; 维护生产系统网络安全、稳定、可靠; 维护生产系统数据备份 岗位要求: 深入理解运维体系结构,精于容量规划、架构设计、性能优化; 熟悉服务管理、单元部署、自动扩容等运维系统建设,对...
  • 软件测试基本流程

    2020-03-22 17:11:05
    4、测试执行阶段:提测后,搭建QA环境,先执行冒烟测试,然后进行系统测试,提交bug,跟踪bug,直到被测软件达到测试需求要求,测试结束; 5、测试评估阶段:出测试报告,对整个测试过程和版本质量做一个详细评估,...
  • 产品体验报告-美团APP

    2015-03-18 13:24:53
    体验产品:美团Android版本软件版本:v5.4-b240设备型号:Samsung GALAXY S4操作系统:Android 4.2.2需求分析C端用户为什么要使用美团APP?1.节省费用2.及时获得商家信息、其他消费者评价,选择更合适的商家3.减少...
  • 前言压力测试是每一个Web应用程序上线之前都需要做的一个测试,他可以帮助我们发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率;预估系统的承载能力,使我们能根据其做出一些应对措施。所以压力测试是一个...
  • 基于socket聊天程序编写实验报告

    热门讨论 2009-06-19 10:41:58
    在信息到来及好友上线时,通过闪动托盘图标和播放不同的音乐进行提示。 建立消息链表来保存用户接收的各种消息。 服务器及客户端的功能可划分为以下模块: 客户端: 1) 登陆功能:建立与服务器的连接并登陆,能...
  • 需求)-------详细设计(开发人员)-------测试用例(测试人员)-----测试用例评审(开发,测试,项目经理,需求)-----编码------部署(测试环境)---------冒烟测试---------bug(禅道)------测试报告---上线(运维...
  • (5) 测试结果不通过时,经商议,剩余Bug虽重要但不影响本次使用,需出具一份报告,留作上线依据。 (6) 上线前/后(内公测/外公测),进行α测试(非开发测试人员进行测试),收集问题,增加系统的可靠性。
  • 简述测试报告包含部分? 参考答案:常见的有可以总结为如下9点: 1.系统名称&版本号 2.测试基础信息:测试时间、测试人员 3.测试情况:需求编号/问题编号 需求描述 测试结果 测试人员 备注 4.测试问题的趋势分析...
  • Java图书管理系统

    热门讨论 2010-04-11 15:49:55
    软件名称:Java图书管理系统(学校版) 版本号:1.0 功能:借书、还书、借书上线限制、图书管理(增加、删除、修改)、学生管理(学生借书证注册、信息修改、删除)、管理员等级(超级管理员、图书管理员、学生管理...
  • 软件平台性能测试与故障诊断 操作系统性能测试与故障诊断 数据库性能知识、性能测试与故障诊断 J2EE架构中间件性能知识、性能测试与故障诊断 网络应用故障诊断 性能测试、故障诊断与性能调优实例分析 硬件与系统性能...

空空如也

空空如也

1 2 3 4
收藏数 75
精华内容 30
关键字:

软件系统上线报告