Jenkins流水线 ssh-agent执行远端代码
[TOC]
个人很反对在Jenkins窗口里写构建代码,原因是这样做不能对代码做版本管理。但将构建代码做到版本管理后,也产生了另外的问题,在提交代码与Jenkins之前来回切换调试构建流程,这过程可谓非常繁琐!!幸亏流水线的出现的出现,解决了这两个痛点。
本文主要介绍ssh-agent在流水线中的运用。鉴于ssh-agent插件主页的操作说明不够详细,本人在配置时遇到一些问题,如不知从哪里配置Jenkins凭据ID、在远端执行指令无效。如果没了解过Jenkins流水线脚本化代码,建议先简单阅读一下官网说明
配置ssh免密登录
ssh-agent插件实际是套用ssh登录,所以让ssh-agent正常工作必须先要配置好ssh环境。配置环境并不复杂且网上有大量可查资料,此处不再另述,...
Click to read more ...
整理常用linux命令
纯以记录为目的,以便日后翻查或者重新理解命令使用方法
linux
日志收集
在用grep筛选日志,上下相邻的几条日志会有可能对当时排查问题有另外的提示作用
选荐-n显示日志的行号,观察该行号附近的日志分析问题,如显示每条error的行号
grep -n "error" FILE_PATH
选项-A、-B和-C分别可向下、向上和同时上下,额外显示N行日志。如在error日志行上下再显示5行日志
grep -C5 "error" FILE_PATH
grep多条件筛选日志
与逻辑,如下搜索包含ERROR与指定角色123456的行
grep "error.*role_id:12...
Click to read more ...
数值程序化 lua中的load运用
[TOC]
数值条件
以下是游戏中常见条件达到逻辑
收集X个Y道具
角色达到Y级开启
任意一个装备升级到Y品质
…
如何在策划配置表中,定义以上规则?常见的办法就是预先定义事件类型X和事件值Y,代码中监听事件X,根据事件的具体逻辑计算相关当前值与事件Y比较,以得出是否满足配置项的条件。
目标类型
说明
1
获得道具
2
角色当前等级
3
升级装备
配置数值
说明
{1, X...
Click to read more ...
lua代码规范
[TOC]
命名
小写蛇形命名
文件和目录名
本地变量,全局变量g_开头
local my_var = 0
g_my_var = 0
大写蛇形命名
全局常量,以G_开头
G_SERVER_ID = 1
全局枚举,以E_开头且_TYPE结尾
E_SERVER_TYPE = {
LOGIN = 1,
GAME = 2,
GLOBAL = 3,
}
排版
在逗号之后添加一个空格
-- bad
local t = {1,2,3}
-- good
lcoal t = {1, 2, 3}
在运算符、赋值符和连接符前后各添加...
Click to read more ...
搭建centos基础开发环境的一些考虑
或许会有疑问,只要项目工程预编译好二进制文件,checkout下来就能跑了,几乎不需要再给centos安装些什么环境!因为开发过程还可能需要ssh远程,设置账号权限,设置网络端口规则,崩溃调试和性能采集等。作为技术人员可以很轻松地完成这些工作,但实际情况是非技术人员也有可能要搭自己的本地运行环境,尽管提供了搭建文档,但对他们来讲处理这些并不容易。
考虑各个项目的代码框架各有差异。此处不会涉及广泛的内容,仅以C/C++游戏后端开发基于Window主机+centos客机的搭建模式,其中只安装了必备的一些工具,你可能需要根据项目框架的实际情况另行安装。
开发环境配置的基础认知:
搭建本地运行环境有很好的隔离作用。使用项目任务得以尽可能并行开发而互不干扰。技术同事有着各自的前端/后...
Click to read more ...
计算平均值,复杂度O(1)
公会对象按以下形式缓存了所有成员的最新等级iLevel,要求实时刷新公会成员的【平均等级】,成员最多200人。
tMemberMap =
{
[角色ID1} = {iLevel=1, sPlayerName="xxx", ... }
[角色ID2} = {iLevel=2, sPlayerName="xxx2", ... }
...
}
当成员加入或离开公会或角色升级,触发重刷平均等级,简单的做法是遍历tMemberMap计算出【等级总和】,后除以【成员人数】。
公会成员最多只有200人,这样的做法绝对不会有性能问题。但这里我想发散一下,如果是海量数据呢?或者没有缓存信息tMemberMap呢?
我分析了一下,还是依据公式【平均等级】=【等级总和】/【成...
Click to read more ...
排行榜-排序
以下是lua版本二分插入排序
-- lua实现
function binary_insert(list, value)
local left = 1
local right = #list
local mid = -1
while left <= right do
mid = math.floor((left + right)/2)
if list[i] == value then
left = mid
right = mid
break
elseif list[i] < value then
lef...
Click to read more ...