Android下的配置管理之道之git相关的常见问题
这里是一些常见问题的总结,可能关于git,repo,gerrit,ubuntu等
FAQ : fatal: ‘xxxxx/bbbbbbbbbb/platform/manifest.git’: not a Gerrit project
80%是因为没有权限,可以尝试访问http://gerrit.xxx.com:8080/#/admin/projects/ 搜索一下有没有这个project, 在下面的filter框里面输入project的名称,可以只输入最后的一个单词,会过滤出来的。
如果project的list里面看不到任何东西,表明没有gerrit的权限。
当然还有20%是因为project的名字打错了,同样去上面的地址搜下,找到正确的project名字即可
FAQ :Permission denied (publickey).
本地的ssh key和服务器上不匹配或者本地的key有问题,可以重新把key在gerrit上贴一遍cat ~/.ssh/id_rsa.pub 命令的输出结果贴到http://gerrit.xxxx.c ...
Android下的配置管理之道之sign_target_files_apks分析总结
整个流程 大概分为下面几步
先编译出来一个完整的 xxxx-target_files-eng.magesfc.zip 文件。
执行./build/tools/releasetools/sign_target_files_apks -v -o -d build/target/product/security xxx-target_files-eng.magesfc.zip sign-xxx-target_files-eng.magesfc.zip
执行 ./build/tools/releasetools/ota_from_target_files -v --path Bins/linux-x86 -kreleasekey sign-xxxx-target_files-eng.magesfc.zip sign-xxx-ota-eng.magesfc.zip 生成ota全包。
其中涉及到的代码都在 ./build/tools/releasetools 下面, 主要有2个文件 sign_target_files_apks和 ota_from_tar ...
repo系列之manifest文件详解
Android使用repo来管理多个Git项目。它需要一个manifest XML文件来指示这些git项目的属性。
这里对manifest 做个介绍:
1.manifest: 最顶层的XML元素。
123456789101112131415<?xml version="1.0" encoding="UTF-8"?>可以包含的子元素<!DOCTYPE manifest [ <!ELEMENT manifest (notice?, remote*, default?, manifest-server?, remove-project*, project*, extend-project*, repo-hooks?, ...
repo系列之repo-sync源码分析
repo sync 子命令源码分析使用的repo 版本是 v1.13.2
源码文件在subcmds/sync.py
从 repo sync -cdj1 abl/tianocore/edk2 执行开始开始说起TODO 后续再讲一下 -c -d -j 这几个参数作用,在源码里面是如何影响repo sync的行为的。
1.第1步:1234def _Main(argv): 入口在这里的,main.py 的 _Main 方法这里, ...... result = repo._Run(argv) or 0 然后调用到这里的 _Run 方法。
repo 对象是 class _Repo(object) 类的一个实例,在 main.py 里面定义的。
repo 里面有2个成员变量 self.repodir 和 self.commands
self.repodir 值是 ‘xxxx/.repo’ 目录
self.commands 是一个字典,每个key都是 repo 子命令,例如 init,sync 这些。对应的value是 subcmds ...
repo系列之repo支持多线程去checkout的
repo 支持 多线程去 checkout的repo 支持 多线程去 checkout的第一次 提出 _Checkout 方法
3663 * 745be2e * Add support for partial clone. [2019-06-03 11:24 2019-07-16 00:23] (tag: v1.13.4)| 2715 * 5a03308 * sync: try to checkout repos across sync failures [2019-09-23 19:21 2020-02-05 21:37]| 2715 * 5a03308 * sync: try to checkout repos across sync failures [2019-09-23 19:21 2020-02-05 21:37]| 884 * ebf04a4 * sync: switch local checkout to multiprocessing ...
repo系列之仓库下面的commit-msg是怎么生成
为什么有的 仓库 没有 hook commit-msg1repo forall -c 'a=$(file .git/hooks/commit-msg); echo $a=$REPO_PATH'
初步来看 和 xml 中的 remote 那里配置的review 有关系。
123456789101112131415161718192021222324252627282930313233343536def _InitHooks(self): hooks = platform_utils.realpath(self._gitdir_path('hooks')) if not os.path.exists(hooks): os.makedirs(hooks) for stock_hook in _ProjectHooks(): name = os.path.basename(stock_hook) if name in ('commit-msg',) and not self.remote.review \ ...
repo系列之repo-diffmanifests源码分析
repo diffmanifests 子命令源码分析这个命令的作用是比较2个 manifest xml 文件的差异的,比较里面每个仓库的git log差异,一般用来对比2个构建版本之间的提交差异,生成 changelog 使用的。
效果如下:
123456789101112131415161718repo diffmanifests old.xml new.xmlchanged projects : git-repo changed from 3bbbcaf99d6137b3ca88dd8bb0acc8733cf1e6be to 13f323b2c221db4e69e3f5a671455954b65f1fb3 [+] 13f323b event_log: turn id generation from a generator to a func call [+] 12ee544 init: Remove -c short option for --current-branch [+] e158e38 Merge "README: link in new bug tra ...
repo系列学习之repo的使用
简介谷歌对android的源代码管理使用的是git。但是在git的基础上,谷歌开发出来了一套新的工具,python写的一套脚本,名字是repo。
Android源代码工程(AOSP)是非常多的git仓库组成的。目前估计有上百个独立的git仓库。怎么管理这些仓库呢?使用一个清单文件(maniest.xml)来管理每个仓库。这个xml也需要个仓库存放来管理,就是manifest.git 仓库。那怎么来下载一套aosp的代码呢?就是使用repo工具,通过manifest.xml 来下载所有的仓库,所有的代码。
到目前为止,我们提到了三种类型的Git仓库,分别是Repo仓库、Manifest仓库和AOSP子项目仓库。Repo仓库通过Manifest仓库可以获得所有AOSP子项目仓库的元信息。有了这些元信息之后,我们就可以通过Repo仓库里面的Python脚本来操作AOSP的子项目。repo是个工具仓库,这个工具仓库中有个一个文件,名字是repo。这个是一个引导脚本。我们一般会使用这个引导脚本来把整个repo仓库下载下来,整个仓库有了才会有整个功能。一个单一的repo文件里面代码有限的,功能有限 ...
Jenkins学习之DataBoundConstructor和DataBoundSetter
Jenkins DataBoundConstructor DataBoundSetter@DataBoundConstructor 这个注解的作用是用于参数注入(反射),jenkins将界面上获取的值,传递给这个构造函数。这样插件就能获取到在界面上配置的值了。
探讨 DataBoundConstructor DataBoundSetter 对流水线中的使用方法的影响第一种情况构造方法 有参数的,加上 注解的,每个 set 方法上也加上 注解的, config.jelly 文件没有配置 域的。
123456@DataBoundConstructorpublic ReadIniStep(String file, String section, String option)@DataBoundSetter 加到setter 方法上
然后流水线 可以这么来用, 可以看到 加上括号,和 不加 括号 都可以的。
12def value = readIni file:"./env.cfg", section:"build", option:& ...
Docker学习之安装docker-swarm集群
docker swarm 集群搭建实验环境采用 1个 master ,3个 work节点,4台机器组成的一个集群环境。
安装4台服务器的系统学习的时候最好采用vm虚拟机,安装好一个初始化的可用的带docker的系统,然后打一个快照。后续的学习系统都可以从这里克隆出来,非常快的。
安装docker环境可以参考官方文档。
或者参考我这个文档 https://magesfc.github.io/mage/64aa5aff5028b66fde1c4d99fabd89113f42a31a/
初始化 docker swarm master 节点1234567891011121314151617181920212223242526# docker swarm init --help Usage: docker swarm init [OPTIONS]Initialize a swarmOptions: --advertise-addr string Advertised address (format: "<ip|interface&g ...
Jenkins学习之master服务器安装使用docker安装
jenkins学习之master服务器安装先安装dockerDownloading and running Jenkins in Docker使用这个:https://hub.docker.com/r/jenkins/jenkins/ 镜像
这里 https://www.jenkins.io/download/ 官方的下载地址,上面可以选择不同的系统的,不同的安装方式的。
12345678910docker run -it --name jenkins -p 8080:8080 -p 50000:50000 -v /home/jenkins:/var/jenkins_home jenkins/jenkins:latestdocker run -d --hostname jenkins-master --name jenkins \-p 8080:8080 -p 50000:50000 \-e TZ=Asia/Shanghai \-v /home/jenkins:/var/jenkins_home \-v /usr/share/zoneinfo/Asia/Shanghai:/et ...
Linux学习之常用的多线程压缩技术
pigz命令 – 多线程的解压缩文件pigz命令来自于英文词组”parallel implementation of gzip“的缩写,其功能是用于多线程的解压缩文件。与其他解压缩命令不同的是pigz命令支持多线程的并行处理方式,同比gzip能快60%以上,当然CPU的消耗也会更高。如果想快速的压缩、解压文件,那么就一定要选它~!
使用 pigz 来提速压缩1234 tar -cf - "${in}" | pigz -p "$(nproc)" > "${out}" ...