Jenkins Pipeline初体验

使用jenkins pipeline共享库,各应用都可以引用共享库方法,更改共享库即可应用到所有使用此库的jenkins-job。我目前没有用到vars目录,但完全能够满足我们日常需求,使用方式上可能较low,直接开始体验。 下面列出了定义的部分方法,以作参考。 共享库目录结构: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 jenkins-pipeline-libraries git:(master) ✗ tree . . ├── jenkins-ci │ └── jenkinsfile-java ├── out │ └── production ├── src │ ├── ops │ │ └── jk │ │ ├── appDetail.groovy │ │ └── tools.groovy │ └── pipeline.gdsl └── vars └── pipelineCfg.groovy 7 directories, 6 files appDetail.groovy文件里面部分函数如下: ...

January 12, 2020 · 6 min · 1266 words · erpan

vim 常用操作及配置

vim常用操作汇总 光标移动 上下左右 k/j/h/l 行首 0 或者 ^ 行尾 $ 单词和字符串间移动 指令 动作 w/W 正向移动到下一个单词开头,大写的忽略特殊字符、符号等 b/B 和w相对应的反向移动,移动到上一个单词开头 e/E 正向移动到下一个单词结尾 ge 反向移动 {num+} f/F+空格 正向/反向移动到本行空格的地方,num相当于移动几次 跳转 指令 动作 ctrl+f 向下翻页 ctrl+b 向上翻页 ctrl+d/u 向下/向上翻半页 gg 文件行首 G 最后一行 行号+gg/G 都是跳到指定行号的行 g+ctrl+g/G 查看光标位置,输出包含行、列、词、字节位置 缩进操作符 指令 动作 » 和 « 或者 :> 和 :< 当前行右缩进和左缩进,后者命令行模式 :line_num1,line_num1+x> 或者 :line_num>x 命令行模式,批量缩进,缩进x行 复制粘贴 复制剪贴内容存于寄存器, :reg可以查看寄存器内容 指令 动作 yy / 8yy 复制/8行 dd / 8dd 剪贴/8行 p/P 粘贴到光标前/后 u 撤销 ctrl+r 重做 yw 复制当前光标单词 y8w / y8W 复制含当前光标的正向8个单词,大写W的含义和W移动含义相同(忽略一些符号) x/4x/X 剪贴单个字符/4个字符,大写就是反向 d{w/h/j/k/l} 可以各种组合 d$/D 删除光标到行尾 d^ 删除光标到行首 插入、查找、替换 插入 指令 动作 I/A i/a 行首、行尾插入,向前向后插入 o/O 下一行、上一行插入 num + (i/I/A/a/o/O) 多次插入,即重复插入多个字符或者多行 转换 指令 动作 ~ 单个字符大小写转换 g~w 单词大小写反转 g~$ 或 g~~ 整行大小写反转 gU或gu + 回车 整行转大写或小写 gU/uw 单词转大写或小写,转换光标到词尾的部分 ’.’:点操作符表示重复上一次操作 ...

June 20, 2019 · 4 min · 704 words · erpan

Linux虚拟内存与物理内存

概念 在linux中,内存分为物理内存和虚拟内存,即ps命令中的RSS和VSZ。虚拟内存存在的原因是为了解决在物理内存上直接划分内存存在的一些问题,比如: 频繁申请和回收内存导致的空间碎片化 可以随意访问用于其他用途的内存区域,不安全 难以执行多任务 进程能看见的是虚拟地址空间,且地址段时连续的,而系统上搭载的内存的实际的地址是物理地址。通过命令 readelf和cat /proc/<pid>/maps输出的就是进程的虚拟地址。 虚拟内存以页为单位进行划分的,在x86_64的架构中页大小默认是4KB,getconf PAGESIZE可以查看页大小。通过内核管理的页表可以完成从虚拟地址到物理地址的转换,每个进程拥有独立的虚拟地址空间,进程的虚拟内存是连续的,但是在物理内存中不一定是连续,且进程只能访问自己的虚拟内存段,没法访问到其他进程的虚拟内存空间和物理内存。 利用虚拟内存机制的重要功能: 文件映射 请求分页 写时复制 swap 多级页表 标准大页 请求分页 如果内核直接从物理内存中获取需要的区域,然后设置页表并关联虚拟地址空间与物理地址空间,这样会导致内存的浪费,有一部分内存获取后可能进程到运行结束都不会使用,如: 用于大规模程序中的、程序运行时未使用的功能代码段和数据段 由glibc保留的内存池中未被用户利用的部分 所以利用请求分页来解决这个问题。对于虚拟地址空间内的各个页面,只有在进程初次访问页面时才会为这个页面分配物理内存。 过程: ① 进程访问入口点 ② CPU 参照页表,筛选出入口点所属的页面中哪些虚拟地址未关联物理地址 ③ 在CPU中引发缺页中断 ④ 内核中的缺页中断机构为页面分配物理内存并更新页表 ⑤ 回到用户模式继续运行进程 测试 现用以下测试代码观察虚拟内存和物理内存的分配关系 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 #include <unistd.h> #include <time.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <err.h> #define BUFFER_SIZE (100*1024*1024) #define NCYCLE 10 #define PAGE_SIZE 4096 int main(void) { char *p; time_t t; char *s; t = time(NULL); s = ctime(&t); printf("%.*s: before allocation, please press Enter key\n", (int)(strlen(s) - 1), s); getchar(); p = malloc(BUFFER_SIZE); //申请100MB的内存 if (p == NULL) err(EXIT_FAILURE, "malloc() failed"); t = time(NULL); s = ctime(&t); printf("%.*s: allocated %dMB, please press Enter key\n", (int)(strlen(s) - 1), s, BUFFER_SIZE / (1024 * 1024)); getchar(); int i; // 以页为单位访问内存,每10M且隔1秒就输出一次信息 for (i = 0; i < BUFFER_SIZE; i += PAGE_SIZE) { p[i] = 0; if (i != 0 && i % (BUFFER_SIZE/NCYCLE) == 0) { t = time(NULL); s = ctime(&t); printf("%.*s: touched %dMB\n", (int) (strlen(s) - 1), s, i / (1024*1024)); sleep(1); } } t = time(NULL); s = ctime(&t); printf("%.*s: touched %dMB, please press Enter key\n", (int) (strlen(s) - 1), s, BUFFER_SIZE / (1024 * 1024)); getchar(); exit(EXIT_SUCCESS); } 示例说明: ...

August 12, 2018 · 2 min · 370 words · erpan

限制svn上传文件大小

为了方便管理和避免一些问题,svn上传文件需要限制文件大小 svn有几种钩子,资料一搜一大把,限制上传文件大小需要用到 pre-commit 在仓库hooks目录下有示例配置文件,新建一个名为 pre-commit 的脚本,内容如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #!/bin/bash REPOS="$1" TXN="$2" SVNLOOK=/usr/bin/svnlook MAX_SIZE=512000 files=$($SVNLOOK changed -t $TXN $REPOS | awk '{print $2}') # check check if [[ $files =~ "project_nuli" ]];then for f in $files do # check file size filesize=$($SVNLOOK cat -t $TXN $REPOS $f | wc -c) if [ $filesize -gt $MAX_SIZE ] ; then echo "File $f is too large (must <= $MAX_SIZE)" >> /dev/stderr exit 1 fi done fi exit 0 客户端提交大于500K文件会返回 File $f is too large (must <= $MAX_SIZE) ...

December 13, 2017 · 1 min · 178 words · erpan

Linux系统平均负载和上下文切换

平均负载 top/uptime显示的平均负载到底是啥意思?它的值多少是比较合理的? Linux系统中,不知道的命令、库和系统调用等都可以执行下man命令来查看。 man uptime说明: ​ System load averages is the average number of processes that are either in a runnable or uninterruptable state. A process in a runnable state is either using the CPU or waiting to use the CPU. A process in uninterruptable state is waiting for some I/O access, eg waiting for disk. The averages are taken over the three time intervals. Load averages are not normalized for the number of CPUs in a system, so a load average of 1 means a single CPU system is loaded all the time while on a 4 CPU system it means it was idle 75% of the time. ...

November 12, 2017 · 1 min · 184 words · erpan