gitlab shell runner

快速创建 gitlab shell runner 真没想道有一天, 我居然会创建 gitlab shell runner 。 环境太难管理了 创建 gitlab shell runner 实话实说, gitlab 现在的用户体验太好了。 根本不需要到处去搜文档,直接在 runner 管理界面就可以找到, 还贴心的给你准备了全套, 一键复制粘贴搞定。 https://git.example.com/admin/runners 点击 Show Runner installation instructions 可以看到多种 runner 的配置。 在默认的基础上, 根据实际情况优化一下。 1 2……

阅读全文

golang 使用反射绑定 cobra flag 参数

golang 使用反射绑定 cobra flag 参数 cobra https://github.com/spf13/cobra 是 golang 中一个非常好用的 命令 开发库。 但是绑定 flag 参数的时候略微有点繁琐, 不但有多少个参数就需要写多少行绑定代码, 而且参数定义和描述也是分开的, 非常的不直观。 1 2 3 4 5 6 func init() { rootCmd.Flags().StringVarP(&stu.Name, "name", "", "zhangsanfeng", "student name") rootCmd.Flags().Int64VarP(&stu.Age, "age", "a", 18, "student age") // ... } 想着吧, 反正都要了解 golang reflect 反射, 不如就用 反射 实现一个绑定支……

阅读全文

go-jarvis 容器化 go 应用开发配置管理利器

go-jarvis/jarivs 为了方便 golang 容器化开发的时候管理配置。 核心功能 根据 config 结构体生成 yaml 配置文件 程序启动时, 从 yaml 配置文件和 环境变量 中对 config 赋值 执行逻辑 根据配置 config{} 生成对应的 default.yml 配置文件。 读取依次配置文件 default.yml, config.yml + 分支配置文件.yml + 环境变量 根据 GitlabCI, 分支配置文件 config.xxxx.yml 如没有 CI, 读取本地文件: local.yml 使用需求 config 对象中的结构体中,……

阅读全文

docker runner 配置编译环境的大文件依赖

docker runner 配置编译环境的大文件依赖 需求简介: 现在要做某个 arm 平台的的交叉编译环境, 交叉编译依赖和工具包大小 5G 左右, 特别大。 如果按照以往的方式, 直接将 编译依赖和工具 直接打包到编译镜像中, 会有很多麻烦。 单 layer 过大 docker 单层 layer 限制为 5G。 镜像升级迭代 浪费空间 。 如果镜像上层升级或者依赖变化, 整个 layer 不能……

阅读全文

gitlab-runner-build not found in path

"gitlab-runner-build": executable file not found in $PATH 在搭建 gitlab-runner 的过程中,报错如下 1 ERROR: Job failed (system failure): prepare environment: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "gitlab-runner-build": executable file not found in $PATH: unknown (exec.go:57:0s). Check https://docs.gitlab.com/runner/shells/index.html#shell-profile-loading for more information 因为在 environment 中 扩展了 PATH 而导致 gitlab-runner-helper 中的 PATH 出现了异常。 从而导致 gitlab-runner-build 这个脚本(命令) 无法被找到。 原因分析 在 gitlab 的定义中 environment 的行为有两种 , append(扩展) 或 overwrite(覆盖)。……

阅读全文

GET 请求也能传递 JSON Body

GET 请求也能传递 Body 数据 通常而言, GET 请求很少传递 Body 数据, 大多情况下都是放在 url 中, 例如 1 http://example.com/api?key1=value1&key2=value2 但是这样做, 可能由于 传递数据过多 导致 URL 过程而被拦截。 运营商会缓存 URL 地址以达到加速的效果, 而有些参数又不想被缓存。 等等 虽然, 可以使用 POST 请求代替 GET 请求, 在 Body 中传递数据, 但是这样做可能会破坏 RESTful 风格的 API 格……

阅读全文

golang 括号用法总结

golang 括号用法总结 1 2 3 4 5 6 7 8 var ( f unsafe.Pointer a io.ReadCloser = (*os.File)(f) // 只要是一个指针就可以 b io.Reader = a // a的方法集大于等于b,就可以做隐式的转换! c io.Closer = a // 同样 d io.Reader = c.(io.Reader) // 显式转换,c这个接口很明显方法集和io.Reader不同 // 但是万一传入c的对象拥有io.Reader接口呢?比如 ) 提问, 以上这些括号都是……

阅读全文

axios get 请求携带 body 数据

axios get 请求携带 json body 数据 在 http 标准协议中, GET 请求 本身是可以携带 Body 数据 。 至于 GET 请求携带的数据能不能被获取, 还是要看接受端 后端 是否处理。 在 gin-gonic/gin 框架中, GET 请求默认就不会处理 body 中的数据, 只能通过 query 表单数据传递。 然而不同的浏览器对于 URL 长度的限制也不同,一般是 1024 个字符, 1. 有些时候需要携带的数据可能超……

阅读全文

如果 golang map 值不能修改怎么办?

值对象与指针对象 假设有一个 map 对象 map[string]Person , 其中 Person 定义如下。 是一个 struct 1 2 3 type Person struct { Age int } 现在有一个需求, map 中的 Person 对象年龄为 0 , 则将其默认值设置为 18。 很显然, 由于 map[string]Person 中保存的是 值对象 ,因此通过任意方式获取的都是 值对象的副本 , 所有修改都是在副本上, 不能 修改真实值。 如果是 map[string]*Person 就很方便了。 *Person 是 指针……

阅读全文

GitlabCI 使用多个 Runner 执行特定 JOB

GitlabCI 使用多个 Runner 执行特定 JOB 在 Gitlab CI 中,Runner 是 Job 的执行器, 也就是说 Job 的运行环境, 就是 Runner 的环境。 那么, 怎么将同一个 gitlab ci 中的 Job 运行在不同的 Runner 上呢? 例如, 根据 操作系统 区分, job1 运行在 windows 上, job2 运行在 linux 上, 诸如此类。 使用 TAG 指定 runner 其实很简单, gitlab ci 中, 可以通过指定 tags 来设定运行条件, 满足了 tag 才能被……

阅读全文

福利派送

  • (免费星球)「运维成长路线」

  • 又拍云免费 CDN

最近文章

分类

标签

其它