Runner

QT C++工程CI环境笔记

淺唱寂寞╮ 提交于 2020-08-07 09:46:08
开发环境 Ubuntu18.04 or Ubuntu20.04 Qt Creator 4.6.x (Based on Qt 5.11.x) APT list: apt-transport-https git dh-make build-essential autoconf autotools-dev qt5-default libssl-dev qt5keychain-dev devscripts 项目结构 项目主体结构是根据Qt, 用.pro文件组织, 项目最外层TEMPLATE用subdirs, 用于引入项目主pro文件, 这样便于将源代码放入子目录, 实际的项目pro文件在子目录下. 最外层还有对应的说明文件, 授权文件和Gitlab CI配置等. ├── .git ├── .gitignore ├── .gitlab-ci.yml # Gitlab CI配置文件 ├── LICENSE ├── README.md # 项目Readme ├── rockbb # 实际源代码目录 │ ├── app-entry # 为debian/ubuntu提供的桌面图标配置文件及图标文件 │ │ ├── rockbb.desktop │ │ └── rockbb.png │ ├── *.cpp │ ├── *.h, *.ui │ ├── config.h # 全局配置, namespace

gitlab的CICD搭建记录

泪湿孤枕 提交于 2020-08-06 10:00:52
1.使用场景 CICD是最近几年比较火的技术,顾名思义就是持续集成和持续部署。 以前的老技术,比如svn+jenkins这种,jenkins的配置多数还是依赖于负责维护CI的人,很多人不熟悉jenkins怎么配置,每一个步骤应该怎么编译和测试,一般都由CI的人来定义。 而CICD,其实可以使用jenkinsfile,就想gitlab的gitlab-ci.yaml文件,把CICD的流程控制和步骤也作为开发的一部分,由开发去维护。并且可以很快的部署到多个环境。 2. 实践 使用gitlab的CICD流程,使用nginx为例子。搭建一个pipe。一旦提交代码,自动部署nginx到k8s的集群中。 使用到的技术有: docker,k8s,helm,gitlab-runner,nginx 2. gitlab的CICD搭建 步骤一: 搭建k8s集群环境,可以使用minikube或者kubeadm快速的搭建起来k8s集群。 步骤: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ 步骤二: 安装helm https://zhuanlan.zhihu.com/p/33813367 步骤三: 安装gitlab-runner并且注册 步骤四: 在gitlab上面新建project

GitLabRunner和流水线的数据采集与监控

妖精的绣舞 提交于 2020-07-29 08:59:15
本文主要阐述如何配置GitLabRunner和GitLabCI/CD流水线的数据采集与监控。 1.1 配置GitLab Runner监控 GitLab Runner本地具有Prometheus指标,可以访问嵌入式HTTP服务器,通过 /metrics 路径公开。该服务器(如果已启用)可以被Prometheus监视系统抓取,或通过任何其他HTTP客户端进行访问。 公开的信息包括: Runner业务逻辑指标(例如,当前正在运行的作业数) Go特定的流程指标(垃圾收集统计信息,goroutines,memstats等) 常规指标(内存使用情况,CPU使用情况,文件描述符使用情况等) 这些指标是运维人员监视和了解GitLab Runners的一种方式。例如,您可能会对Runner主机上的平均负载和作业数量感兴趣。 Runner默认是没有开启内置的HTTP服务,可以通过两种方式配置指标HTTP服务器: 在 config.toml 文件中配置全局选项 listen_address 。 在Runner启动的时候添加 --listen-address 命令选项。 在这里我直接修改的 config.toml 文件,内容参考如下: $ cat config.toml listen_address = "[::]:9252" concurrent = 10 check_interval = 30 log

26. Remove Duplicates from Sorted Array

本秂侑毒 提交于 2020-07-29 06:24:02
26. Remove Duplicates from Sorted Array Given sorted array nums , remove the duplicates in-place such that each element appears only once and return the new length. Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory. Example 1: Given nums = [1,1,2] , Your function should return length=2, with the first two elements of nums being 1 and 2 respectively. It doesn't matter what you leave beyond the returned length. Example 2: Given nums = [0,0,1,1,1,2,2,3,3,4] , Your function should return length=5, with the first five

spring boot容器启动详解

风流意气都作罢 提交于 2020-07-28 15:53:46
一、前言 spring cloud大行其道的当下,如果不了解基本原理那么是很纠结的(看见的都是 约定大于配置 ,但是原理呢?为什么要这么做?如何串联起来的?)。spring cloud是基于spring boot快速搭建的,今天咱们就看看spring boot容器启动流程(全文基于1.5.9版本)。(本文不讲解如何快速启动spring boot,那些直接官方看即可, 官网文档飞机票 ) 二、容器启动 spring boot一般是 指定容器启动main方法,然后以命令行方式启动Jar包 ,如下图: 1 @SpringBootApplication 2 public class Application { 3 public static void main(String[] args) { 4 SpringApplication .run(Application. class , args); 5 } 6 } 这里核心关注2个东西: 1.@SpringBootApplication注解 2. SpringApplication.run()静态方法 下面我们就分别探究这两块内容。 2.1 @SpringBootApplication注解 源码如下: 1 @Target(ElementType.TYPE) 2 @Retention(RetentionPolicy.RUNTIME) 3

不会用Java Future,我怀疑你泡茶没我快, 又是超长图文!!

我的未来我决定 提交于 2020-07-28 12:42:12
你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it well enough 现陆续将Demo代码和技术文章整理在一起 Github实践精选 ,方便大家阅读查看,本文同样收录在此,觉得不错,还请Star 前言 创建线程有几种方式?这个问题的答案应该是可以脱口而出的吧 继承 Thread 类 实现 Runnable 接口 但这两种方式创建的线程是属于”三无产品“: 没有参数 没有返回值 没办法抛出异常 class MyThread implements Runnable{ @Override public void run() { log.info("my thread"); } } Runnable 接口是 JDK1.0 的核心产物 /** * @since JDK1.0 */ @FunctionalInterface public interface Runnable { public abstract void run(); } 用着 “三无产品” 总是有一些弊端,其中没办法拿到返回值是最让人不能忍的,于是 Callable 就诞生了 Callable 又是 Doug Lea 大师,又是 Java 1.5 这个神奇的版本 /** * @see

Ansible API 2.0的测试

爱⌒轻易说出口 提交于 2020-07-28 11:29:06
因项目需要使用到ansible api,根据修改官方文档提供的使用范例,经过多次测试,现将能用的代码分享给大家,大家只需根据自己的实际环境修改该代码即可。 官方文档: http://docs.ansible.com/ansible/latest/dev_guide/developing_api.html#python-api-2-0 注意: 在运行此代码的主机需无密码登录目标主机,也就是说您需要下发本机的ssh公钥到目标主机 #coding:utf-8 import json from collections import namedtuple from ansible.parsing.dataloader import DataLoader from ansible.vars.manager import VariableManager from ansible.inventory.manager import InventoryManager from ansible.playbook.play import Play from ansible.executor.task_queue_manager import TaskQueueManager from ansible.plugins.callback import CallbackBase class

java后端开发三年!你还不了解Spring 依赖注入,凭什么给你涨薪

爱⌒轻易说出口 提交于 2020-07-27 13:57:36
前言 前两天和一个同学吃饭的时候同学跟我说了一件事,说他公司有个做了两年的人向他提出要涨薪资,他就顺口问了一个问题关于spring依赖注入的,那个要求涨薪的同学居然被问懵了。。。事后回家想了想这一块确实有点难度的就写篇文章把我自己知道的和网上整理的分享给大家,至少大家在被问到这一块的时候能答上来,不会因为这个被卡涨薪。话不多说,满满的干货都在下面了! 1.什么是Spring的依赖注入? 依赖注入,是IOC的一个方面,是个通常的概念,它有多种解释。这概念是说你不用创建对象,而只需要描述它如何被创建。你不在代码里直接组装你的组件和服务,但是要在配置文件里描述哪些组件需要哪些服务,之后一个容器(IOC容器)负责把他们组装起来。 2. IOC的作用 降低程序间的耦合(依赖关系) 依赖关系的管理: 以后都交给spring来维护 在当前类需要用到其他类的对象,由spring为我们提供,我们只需要在配置文件中说明依赖关系的维护,就称之为依赖注入。 3.Spring依赖注入的几种方式 能注入的数据:有三类 基本类型和String。 其他bean类型(在配置文件中或者注解配置过的bean)。 复杂类型/集合类型。 注入的方式:有三种 使用构造函数提供。 使用set方法提供。 使用注解提供。 构造函数注入 顾名思义,就是使用类中的构造函数,给成员变量赋值。注意,赋值的操作不是我们自己做的

java多线程(2)---生命周期、线程通讯

依然范特西╮ 提交于 2020-07-27 13:03:12
java生命周期、线程通讯 一、生命周期 有关线程生命周期就要看下面这张图,围绕这张图讲解它的方法的含义,和不同方法间的区别。 1、yield()方法 yield() 让当前正在运行的线程回到就绪 ,以允许 具有相同优先级 的其他线程获得运行的机会。但是,实际中无法保证yield()达到让步的目的,因为,让步的线程可能被线程调度程序再次选中。 同时yield()不会放弃锁资源,所以有可能会出现死锁。 2、wait和sleep方法的区别 1)第一个很重要的区别就是, wait方法必须正在同步环境 下使用,比如synchronized方法或者同步代码块。如果你不在同步条件下使用,会抛出IllegalMonitorStateException异常。另外,sleep方法不需要再同步条件下调用,你可以任意正常的使用。 2)第二个区别是,wait方法用于和定义于 Object类 的,而sleep方法操作于当前线程,定义在java.lang. Thread类 里面。 3)第三个区别是,调用 wait()的时候方法会释放当前持有的锁 ,而sleep方法不会释放任何锁。 3、wait和sleep方法使用场景 (1)wait方法定义在Object类里面,所有对象都能用到, 一般wait()和notify()方法或notifyAll使用于线程间的通信 。 (2)sleep()方法用于暂停当前线程的执行。

用 GitHub Action 构建一套 CI/CD 系统

扶醉桌前 提交于 2020-07-27 09:08:10
​ 缘起 Nebula Graph 最早的自动化测试是使用搭建在 Azure 上的 Jenkins ,配合着 GitHub 的 Webhook 实现的,在用户提交 Pull Request 时,加个 ready-for-testing 的 label 再评论一句 Jenkins go 就可以自动的运行相应的 UT 测试,效果如下: 因为是租用的 Azure 的云主机,加上 nebula 的编译要求的机器配置较高,而且任务的触发主要集中在白天。所以上述的方案性价比较低,从去年团队就在考虑寻找替代的方案,准备下线 Azure 上的测试机,并且还要能提供多环境的测试方案。 调研了一圈现有的产品主要有: TravisCI CircleCI Azure Pipeline Jenkins on k8s(自建) 虽然上面的产品对开源项目有些限制,但整体都还算比较友好。 鉴于之前 GitLab CI 的使用经验,体会到如果能跟 GitHub 深度集成那当然是首选。所谓“深度”表示可以共享 GitHub 的整个开源的生态以及完美的 API 调用(后话)。恰巧 2019,GitHub Action 2.0 横空出世,Nebula Graph 便勇敢的入了坑。 这里简单概述一下我们在使用 GitHub Action 时体会到的优点: 免费。开源项目可以免费使用 Action 的所有功能,而且机器