使用 Docker Compose 部署 Gitlab Runner

本文目标:

  • 一台主机部署多个 Gitlab Runner
  • 实现互相隔离且互不影响的 Gitlab Runner 环境
  • 使用 compose.yaml 持久化配置和数据,快速复制部署
  • 在 Gitlab Runner 中使用 docker, helm 以及 kubectl

前置要求:

  • 宿主机上安装了 dockerdocker compose
  • 【可选】宿主机上安装了 kubectlhelm

方案限制:

  • 只能使用 shell 作为 Gitlab Executor
    • 由于 Gitlab Runner 本身运行在 docker container 中,所以几乎没有影响

Read More

开源软件协议 QA

在开始阅读前,可以先尝试这道选择题,测试自己对开源协议的理解😊。
答案在文章最后。

【选择题】以下受开源软件协议约束的场景包括:

  • [ ] A. 包含某个开源软件库,开发一个安卓程序并上架应用商城
  • [ ] B. 包含某个开源软件库,搭建一个后端服务程序并封装为 SaaS 对外服务
  • [ ] C. 包含开源软件库,开发浏览器前端界面并部署上线给用户使用
  • [ ] D. 使用一个开源脚手架工具构建项目并上线应用商城
  • [ ] E. 包含某个开源软件库,开发一个后端服务程序,提供私有化部署
  • [ ] F. 基于某开源编程语言开发的软件,进行分发
  • [ ] G. 基于某个开源编程语言编译器定制开发语言编译器,实现定制编程语言并进行分发
  • [ ] H. 包含某个自己贡献了代码的开源库,开发一个软件并进行分发

Read More

C++对象数据布局(一)——数据对齐的陷阱

C++ Class 对象的数据布局和 C Struct 数据布局遵循同样的原则,按顺序排布并考虑内存对齐的要求。
但是 C++ Class 对象相比于 C Struct 有其创新之处。C++ Class 添加了两个新的 access section,支持在类内声明函数,最重要的是,添加了“继承”的特性。
这其中有什么可怕的陷阱吗?直接公布答案有什么意思,你得自己一步一步趟过去才行。
小心,别中招了!

Read More

并发编程(二)—— 多线程

如果我们把进程比作一个工人的话,那线程就是工人的四肢。怎么理解这个比喻呢?

  • 工人拥有四肢,进程拥有线程
  • 工人干活要依靠手脚来做事,进程干活也是依靠线程来做事
  • 工人和工人之间只能通过工头调度或者相同的操作手册(大脑中的知识)来协作,进程和进程之间只能通过操作系统内核调度或者共享内存来协作
  • 工人的四肢用工人自己的大脑来协调,进程的线程用进程自己的虚拟内存空间来协作
  • 一个工人的四肢的协调效率比多个工人之间的协调效率高,一个进程的线程之间的协作效率比多个进程之间的协作效率要高

Read More

文件描述符表 —— 进程的磁盘资源

如果说基于虚拟页表的虚拟内存空间是进程物理内存资源的抽象,那基于文件描述符表的文件系统就是进程磁盘资源的抽象。通过持有文件描述符,进程可以方便地对磁盘上的特定位置(文件)进行读写。
打个不太准确的比方。如果我们把磁盘也看作一个像物理内存一样的字节序列,那磁盘上的文件就像内存中的分页,文件描述符就像 PTE,文件描述符中的 offset 就像 VPN(PPN)。
本文就来解释进程中的文件描述符表的机制。

Read More

Win 10 无法发现局域网电脑的解决办法

最近整了一台 Surface Go,想在主力 PC 间实现远程桌面和文件共享。
本以为都 2019 年了这些事情肯定“只需要点一下”就好了,实际上还是有很多坑。这篇文章就记录了 “Win 10 不能发现/连接局域网电脑” 的解决办法,基本上能解决所有网络上提到的 Win 10 联机问题(前提是在局域网)。

  • 确保在 “控制面板\网络和 Internet\网络和共享中心\高级共享设置” 勾选了 “启用网络发现” 和 “启用文件和打印机共享”,这是实现任何远程互动的前提
  • 如果要使用远程桌面,必须允许远程访问计算机,让 Cortana 找出来“必须允许远程访问计算机
  • 如果要使用文件共享,必须在 “启用或关闭Windows功能” 中启用 SMB,让 Cortana 找出来“启用或关闭Windows功能
  • 让 Cortana 找出“服务”,设置以下服务自动开启:
    • PNRP Machine Name Publication Service
    • TCP/IP NetBIOS Helper
    • Computer Browser(Browser)
    • Function Discovery host Provider(FDPHOST)
    • Function Discovery Resouce Publication(FDResPub)
    • Network Connections(NetMan)
    • Upnp Device Host(UpnpHost)
    • Peer Name Resolution Protocol (PNRPSvc)
    • Peer Networking Grouping (P2PSvc)
    • Peer Networking Identity Manager (P2PIMSvc)
  • 最后为了省心,干脆重启个电脑吧

Read More