!279 git工作流文档更新openkylin 2.0版本自动打包说明

Merge pull request !279 from 公子文彬/develop-openkylin-2.0
This commit is contained in:
moshengren 2023-08-21 02:10:42 +00:00 committed by Gitee
commit 560f3cef96
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
3 changed files with 52 additions and 66 deletions

View File

@ -106,7 +106,7 @@ LOGIN改为自己的okbs帐号对应ID
> [okbs]
> fqdn=build.openkylin.top:2121
> fqdn=upload.build.openkylin.top:2121
> method=sftp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -7,9 +7,9 @@
| 分支 | 说明 | 举例 |
| --------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| 上游分支 | 不包含debian目录的分支保存软件包的上游源码。 修改包只需要一个上游分支统一命名为upstream。 对于自研包,可能会多版本并行开发,所以可能会有多个上游分支,为了避免与打包分支混淆,上游分支名称里不能使用“/” | upstream master 1.0 2.0 |
| native打包分支 | 用于包维护者提交修改的分支包含debian目录。 相对于上游分支修改的内容可以直接提交到这个分支。 | 名称格式为:发行版代号/系列代号 银河麒麟V10 SP1的开发分支命名为yhkylin/v101openKylin 长江版本开发分支命名为openkylin/yangtze |
| quilt打包分支 | 修改包要求使用quilt分支进行打包这个分支下包维护者相对上游分支做的修改都以patch形式保存在debian/patches目录中便于更新上游版本时进行取舍。 自研包可以直接用native分支打包也可以用quilt。 CI平台自动完成native分支到quilt分支的同步。 | openkylin/yangtze对应的quilt打包分支在分支名前面加上packaging/ packaging/openkylin/yangtze |
| patch-queue分支 | CI构建环境中使用的临时分支不会提交到源码管理平台辅助将native打包分支的修改内容生成patch保存到quilt打包分支。 | patch-queue/packaging/openkylin/yangtze |
| 开发分支 | 用于包维护者提交修改的分支包含debian目录。 相对于上游分支修改的内容可以直接提交到这个分支。开发分支中源码包格式为native | 名称格式为:发行版代号/系列代号 openKylin 1.0版本开发分支命名为openkylin/yangtze |
| 打包分支 | 修改包要求使用quilt格式进行打包这个分支下包维护者相对上游分支做的修改都以patch形式保存在debian/patches目录中便于更新上游版本时进行取舍。仅能用于当前发行版的包可以使用native格式打包此时不需创建打包分支。 CI平台自动完成开发分支到打包分支的同步。 | openkylin/yangtze对应的打包分支在分支名前面加上packaging/ packaging/openkylin/yangtze |
| patch-queue分支 | CI构建环境中使用的临时分支不会提交到源码管理平台辅助将开发分支的修改内容生成patch保存到打包分支。 | patch-queue/packaging/openkylin/yangtze |
@ -17,7 +17,7 @@
源码包导入会自动创建上游分支和打包分支对于quilt格式的源码包需要将打包分支转化成native格式便于开发者利用git管理文件修改历史。
![img](https://gitee.com/openkylin/docs/raw/master/%E5%BC%80%E5%A7%8B%E8%B4%A1%E7%8C%AE/assets/openKylin%E6%BA%90%E7%A0%81%E5%8C%85git%E5%B7%A5%E4%BD%9C%E6%B5%81/%E6%BA%90%E7%A0%81%E5%8C%85%E5%AF%BC%E5%85%A5%E6%B5%81%E7%A8%8B%E5%9B%BE.png)
![img](assets/openKylin%E6%BA%90%E7%A0%81%E5%8C%85git%E5%B7%A5%E4%BD%9C%E6%B5%81/%E6%BA%90%E7%A0%81%E5%8C%85%E5%AF%BC%E5%85%A5%E6%B5%81%E7%A8%8B%E5%9B%BE.png)
git_init.sh脚本描述了具体操作步骤
@ -160,7 +160,7 @@ zcat perl_5.30.0.orig-regen-configure.tar.gz | xz -c - > perl_5.30.0.orig-regen
gbp pristine-tar commit --component=regen-configure path-to/perl_5.30.0.orig-regen-configure.tar.xz
```
## 2.3 创建native打包分支集成patch将包分支转换为native分支,便于开发人员本地测试编译)
## 2.3 创建开发分支集成patch将源码转换为native格式,便于开发人员本地测试编译)
```Bash
git checkout openkylin/yangtze # 切换到打包分支
@ -179,7 +179,7 @@ echo "3.0 (native)" > debian/source/format
# 3. 开发维护人员修改软件包(在native包分支如openkylin/yangtze下进行维护
# 3. 开发维护人员修改软件包(在开发分支如openkylin/yangtze下进行维护
## 3.1. 产线代码修改
@ -277,31 +277,31 @@ git push
将native格式源码包转化成quilt格式的动作会通过CI平台自动完成。
![img](https://gitee.com/openkylin/docs/raw/master/%E5%BC%80%E5%A7%8B%E8%B4%A1%E7%8C%AE/assets/openKylin%E6%BA%90%E7%A0%81%E5%8C%85git%E5%B7%A5%E4%BD%9C%E6%B5%81/native%E6%A0%BC%E5%BC%8F%E6%BA%90%E7%A0%81%E5%8C%85%E8%BD%AC%E5%8C%96%E6%88%90quilt%E6%A0%BC%E5%BC%8F-%E6%B5%81%E7%A8%8B%E5%9B%BE.png)
![img](assets/openKylin%E6%BA%90%E7%A0%81%E5%8C%85git%E5%B7%A5%E4%BD%9C%E6%B5%81/native%E6%A0%BC%E5%BC%8F%E6%BA%90%E7%A0%81%E5%8C%85%E8%BD%AC%E5%8C%96%E6%88%90quilt%E6%A0%BC%E5%BC%8F-%E6%B5%81%E7%A8%8B%E5%9B%BE.png)
## 4.1 以quilt格式打包
在打包环境中clone git库创建临时quilt打包分支进行打包
在打包环境中clone git库同步开发分支的代码到打包分支进行打包
native转换成quilt主要差异在于要相对于upstream的代码改动形成补丁而不是直接在源码文件上修改我们利用gbp pq来生成补丁。
```Bash
# 切换到quilt打包分支
# 切换到打包分支
git checkout packaging/openkylin/yangtze
# 创建临时patch-queue自动切换到patch-queue/packaging/openkylin/yangtze
gbp pq import
# 在patch-queue中提交native打包分支最新的改动
# 在patch-queue中提交开发分支最新的改动
git diff --binary -r openkylin/yangtze -- ':!debian' | git apply -R
git add . -f
# 把native打包分支最新的commit信息提交到patch-queue分支用于导出patch
# 把开发分支最新的commit信息提交到patch-queue分支用于导出patch
git log -r openkylin/yangtze -1 --pretty=format:"%s" | git commit -F -
# 导出patch自动切换到packaging/openkylin/yangtze
gbp pq export
# 同步native打包分支对于debian目录的改动忽略patches和source/format
# 同步开发分支对于debian目录的改动忽略patches和source/format
git diff --binary -r openkylin/yangtze -- debian ':!debian/patches' ':!debian/source/format' | git apply -R
git add debian
# 把native打包分支最新的commit信息提交到quilt打包分支,不需要人工输入
# 把开发分支最新的commit信息提交到打包分支,不需要人工输入
git log -r openkylin/yangtze -1 --pretty=format:"%s" | git commit -F -
# 打包源码因为gbp默认要在master分支打包所以要加 --git-ignore-branch 参数,--git-tag参数可以在打包成功后自动创建tag
gbp buildpackage --git-ignore-branch --git-tag --git-pristine-tar --git-pristine-tar-commit -S -nc
@ -331,10 +331,10 @@ upstream_tag = DebianGitRepository.version_to_tag('upstream/%(version)s', upstre
## 4.2 以native格式打包
native分支可以在当前分支直接打包源码,上传编译平台。
native格式软件包可以在开发分支直接打包源码,上传编译平台。
```Bash
# 切换到native打包分支
# 切换到开发分支
git checkout openkylin/yangtze
# 打包源码因为gbp默认要在master分支打包所以要加 --git-ignore-branch 参数,--git-tag参数可以在打包成功后自动创建tag
gbp buildpackage --git-ignore-branch --git-tag -S
@ -365,7 +365,7 @@ git push --tags
| --pristine-tar | 记录原始orig tar包的数据避免重新用gbp打包后tar包内容发生变化 |
| ------------------ | ------------------------------------------------------------ |
| --no-merge | 不将上游版本的代码合并到打包分支,因为我们的打包分支是native格式的基于upstream修改了源码一般是没办法自动合并的 |
| --no-merge | 不将上游版本的代码合并到打包分支,因为我们的开发分支是native格式的基于upstream修改了源码一般是没办法自动合并的 |
| --upstream-branch= | 指定上游分支名称修改包使用upstream |
在以上的例子中会新创建一个tagupstream/4.0
@ -400,7 +400,7 @@ git checkout packaging/openkylin/yangtze
git merge upstream/4.13.17
```
更新native分支
更新开发分支
```Bash
git checkout openkylin/yangtze
@ -408,13 +408,13 @@ git checkout openkylin/yangtze
git merge upstream/4.13.17
```
native分支修改包版本号
开发分支修改包版本号
```Bash
# 此时,可以在native分支对基于上游upstream的代码进行调试
# 此时,可以在开发分支对基于上游upstream的代码进行调试
# 1. 修改代码,直到能编译出二进制包以及能正常安装
vim xxx
# 2. 在native分支下进行debuild进行编译测试
# 2. 在开发分支下进行debuild进行编译测试
debuild
# 3. 提交改动
git add xxx
@ -497,7 +497,7 @@ git branch --delete --force tmp # 删除tmp分支
- > 该指令是将从commit-idA开始到commit-idB之间的所有commit-id提交记录都合并过来需要注意的是commit-idA必须比commit-idB提前提交也就是说在被挑选的分支上先有的commit-idA然后才有的commit-idB
#### 5.3.3.4 反向同步到native打包分支
#### 5.3.3.4 反向同步到开发分支
```Bash
git checkout openkylin/yangtze
@ -508,10 +508,10 @@ git commit -m 'merge upstream 4.13.17'
### 5.3.4 提交到git服务器
提交native打包分支与packaging分支即可,其他临时分支不要提交
提交开发分支与packaging打包分支即可,其他临时分支不要提交
```
!push时要先push packaging分支再push native分支。
!push时要先push packaging打包分支再push 开发分支。
```
```Bash
@ -571,7 +571,7 @@ gbp import-dsc --pristine-tar --debian-branch=openkylin/yangtze --upstream-branc
例如ukui在某个节点时要将当前已导入的包统一升级上游版本号需要按如下流程操作
1切换到打包分支 例如openkylin/yangtze
1切换到开发分支 例如openkylin/yangtze
```Shell
git checkout openkylin/yangtze
@ -599,7 +599,7 @@ git push --tags
6生成新版本orig.tar包CI平台完成
```Shell
# 将changelog改动同步到quilt打包分支
# 将changelog改动同步到打包分支
git diff --binary -r openkylin/yangtze debian ':!debian/patches' ':!debian/source/format' | git apply -R
git add debian
git log -r openkylin/yangtze -1 --pretty=format:"%s" | git commit -F -
@ -616,10 +616,10 @@ git push origin pristine-tar
前提是upstream版本没有改变为quilt格式否则需要清空仓库全新导入或者走“更新upstream版本”流程。
1quilt打包分支覆盖debian目录
1在打包分支覆盖debian目录
```Shell
# 切换到quilt打包分支
# 切换到打包分支
# 删除现有debian目录准备用Kylin的版本覆盖
# 解压Kylin版本的*.debian.tar文件
@ -629,20 +629,20 @@ git push origin pristine-tar
新增一条修改记录,版本号为<upstream version>-ok<N>N是数字要比覆盖前openkylin中的版本号大。
3覆盖native分支
3覆盖开发分支
# 9. 从头开始构建打包分支
# 9. 从头开始实现自动打包
本节介绍如何在只有upstream等不包含debian配置文件的分支时如何创建打包分支
本节介绍如何在只有upstream等不包含debian配置文件的分支时如何创建开发分支与打包分支
即从upstream建立openkylin/yangtze和packaging/openkylin/yangtze分支。
## 9.1 首先从gitlab上的kylinos-src clone一份干净的代码
## 9.1 首先从gitee上的openkylin clone一份干净的代码
```Bash
git clone git@gitlab2.kylin.com:kylinos-src/<包名>
git clone git@gitee.com:openkylin/<包名>
cd <包名>
```
@ -671,7 +671,7 @@ git log upstream # 找到想要使用的commit id
git tag upstream/1.2.3 031eae9e49ef7b523286410d45ee44ba57e29f79
```
## 9.3 基于upstream标签创建packaging分支添加debian打包配置文件
## 9.3 基于upstream标签创建打包分支添加debian打包配置文件
```Bash
git checkout -b packaging/openkylin/yangtze upstream/1.2.3
@ -689,7 +689,7 @@ gbp buildpackage --git-ignore-branch --git-tag --git-pristine-tar --git-pristine
## 9.4 创建相应的开发分支,方便开发人员修改代码后本地测试
```Bash
# 创建临时的集成patch分支会自动命名为 patch-queue/packaging/openkylin/yangtze1
# 创建临时的集成patch分支会自动命名为 patch-queue/packaging/openkylin/yangtze
gbp pq import
# 重命名为标准的开发分支名称
git checkout -b openkylin/yangtze
@ -702,7 +702,7 @@ git add debian
git commit -m 'change format to native'
```
## 9.5 推送到gitlab服务器
## 9.5 推送到git服务器
```Bash
# 因为新建打包分支涉及到3个分支的修改推送时使用push --all简化操作这也是为什么一定要clone一份干净的代码来操作
@ -710,34 +710,36 @@ git push origin --tags
git push origin --all
```
## 9.6 基于已有的打包分支创建新产线的分支
## 9.6 创建新版本系列开发分支
假设已经存在openkylin/yangtze的打包分支需要为yangtze-2209产线新建bug维护分支分支名约定为openkylin/yangtze-2209由包维护者在gitee上按如下流程操作
当前openkylin 1.0版本已发布2.0版本的开发分支名称已确定为openkylin/nile本节介绍如何实现2.0版本代码自动打包。
如果2.0版本不继承2.0版本代码开发那么可以参考第9节进行只需要把分支名称中的yangtze改为nile。
如果2.0版本继承1.0版本代码由包维护者在gitee上按如下流程操作
1. 访问仓库的分支列表
![img](https://gitee.com/openkylin/docs/raw/master/%E5%BC%80%E5%A7%8B%E8%B4%A1%E7%8C%AE/assets/openKylin%E6%BA%90%E7%A0%81%E5%8C%85git%E5%B7%A5%E4%BD%9C%E6%B5%81/%E5%88%9B%E5%BB%BA%E6%96%B0%E4%BA%A7%E7%BA%BF%E7%9A%84%E5%88%86%E6%94%AF%E7%A4%BA%E4%BE%8B1.png)
![img](assets/openKylin%E6%BA%90%E7%A0%81%E5%8C%85git%E5%B7%A5%E4%BD%9C%E6%B5%81/%E5%88%9B%E5%BB%BA%E6%96%B0%E4%BA%A7%E7%BA%BF%E7%9A%84%E5%88%86%E6%94%AF%E7%A4%BA%E4%BE%8B1.png)
2. 点击“新建分支”
![img](https://gitee.com/openkylin/docs/raw/master/%E5%BC%80%E5%A7%8B%E8%B4%A1%E7%8C%AE/assets/openKylin%E6%BA%90%E7%A0%81%E5%8C%85git%E5%B7%A5%E4%BD%9C%E6%B5%81/%E5%88%9B%E5%BB%BA%E6%96%B0%E4%BA%A7%E7%BA%BF%E7%9A%84%E5%88%86%E6%94%AF%E7%A4%BA%E4%BE%8B2.png)
![img](assets/openKylin%E6%BA%90%E7%A0%81%E5%8C%85git%E5%B7%A5%E4%BD%9C%E6%B5%81/%E5%88%9B%E5%BB%BA%E6%96%B0%E4%BA%A7%E7%BA%BF%E7%9A%84%E5%88%86%E6%94%AF%E7%A4%BA%E4%BE%8B2.png)
3. 输入分支名,分别新建两个分支:
1. 输入分支名,分别新建两个分支:
yopenkylin/yangtze-2209 基于openkylin/yangtze
openkylin/nile 基于openkylin/yangtze
packaging/openkylin/yangtze-2209 基于 packaging/openkylin/yangtze
packaging/openkylin/nile 基于 packaging/openkylin/yangtze
# 10. 已有native格式的分支转换成quilt格式
## 10.1 主线分支转换
1先基于当前版本创建upstream分支和tag
```Bash
# 假设原来的分支名为master,changelog中的版本号为1.2.3,要创建的打包分支为openkylin/yangtze
# 假设原来的分支名为master,changelog中的版本号为1.2.3,要创建的开发分支为openkylin/yangtze
# 创建upstream分支
git checkout -b upstream master
# upstream分支不应该有debian目录
@ -750,15 +752,15 @@ git tag upstream/1.2.3
2创建打包分支
```Bash
# 创建quilt打包分支
# 创建打包分支
git checkout -b packaging/openkylin/yangtze master
# 版本号和源码包格式改为quilt
dch -v 1.2.3-0k1 "quilt format" -D v101 --force-distribution
echo '3.0 (quilt)' > debian/source/format
git add debian
git commit -m 'to quilt format'
# 基于quilt分支创建新的native打包分支
git checkout openkylin/yangtze
# 基于打包分支创建新的开发分支
git checkout -b openkylin/yangtze
echo "3.0 (native)" > debian/source/format
git commit -m 'to native format'
# 测试打包并保存pristine-tar信息
@ -766,22 +768,6 @@ git checkout packaging/openkylin/yangtze
gbp buildpackage --git-pristine-tar --git-pristine-tar-commit --git-ignore-branch -S -nc
```
## 10.2 定制分支转换
定制分支应该尽量保持upstream版本与主线一致但对于已经以native格式进行定制的包版本号可能已经是1.2.3hw1这种形式假如改为1.2.3-0k1hw1的形式会比原来的版本号小只能继续使用定制的upstream版本号。
1创建定制的upstream分支和tag
```Bash
git checkout -b upstream-hw hw
git rm -rf debian
git commit -m 'import hw upstream'
git tag upstream/1.2.3hw1
```
2创建打包分支和主线分支相同只是分支名称不一样。
# 附:个别问题处理
@ -803,7 +789,7 @@ gbp:error: Error creating kbd_2.0.4.orig.tar.xz: Pristine-tar couldn't checkout
dpkg-source: error: detected 1 unwanted binary file (add it in debian/source/include-binaries to allow its inclusion).
假如native分支涉及二进制文件修改生成的patch也会有二进制信息buildpackage时会提示`detected 1 unwanted binary file (add it in debian/source/include-binaries to allow its inclusion)`
假如开发分支涉及二进制文件修改生成的patch也会有二进制信息buildpackage时会提示`detected 1 unwanted binary file (add it in debian/source/include-binaries to allow its inclusion)`
debian推荐把要替换的二进制文件放在debian目录中再修改debian/*.install或者debian/rules的install步骤在编译时覆盖上游的二进制文件。debian中包含二进制文件无论是图片还是patch都需要将文件路径添加到debian/source/include-binaries中或者是直接在debian/source/options里添加一行include-binaries允许包含任何二进制文件。