写点什么

将 TIUP Package 组件能力集成到 TiUP Mirror Pack

  • 2024-06-07
    北京
  • 本文字数:2025 字

    阅读完需:约 7 分钟

作者: 边城元元原文来源:https://tidb.net/blog/266af679

引言

TiUP 是由 PingCAP 开发的一个 TiDB 组件管理工具,它允许用户下载和安装 TiDB 的各个组件。本文将分享如何将 TiUP 的 package 能力 从 tidb-community-toolkit-v8.1.0-linux-amd64\package-v0.0.9-linux-amd64.tar.gz 、tiup 源码 server/pacakge/package.go 中集成到 tiup mirror pack 中,以便于管理和分发自定义的 TiDB 组件。

步骤一: 获取 TiUP 源码

首先,我们需要从 GitHub 上克隆 TiUP 的源代码。请确保您已经安装了 Git,并执行以下命令来克隆 TiUP 的特定版本:


git clone https://github.com/pingcap/tiup.git --depth=1 -b release-1.15 tiup1.15
复制代码

步骤二:扩展 TiUP Mirror Pack 功能

接下来,我们需要在 TiUP 的源码中添加一个新的子命令,用于打包组件。打开 cmd/mirror.go 文件,并在文件末尾添加以下代码:


// packageOptions 结构体定义了打包选项type packageOptions struct {  goos    string  goarch  string  dir     string  name    string  version string  entry   string}
// the `mirror pack` sub commandfunc newMirrorPackCmd() *cobra.Command { options := packageOptions{}
rootCmd := &cobra.Command{ Use: "pack", Short: "pack compent", Long: `pack component to tarball. tar -C <bindir> -czf package/<name>-<release>-<os>-<arch>.tar.gz <entry>`, DisableFlagParsing: false, RunE: func(cmd *cobra.Command, args []string) error { if err := utils.MkdirAll("package", 0755); err != nil { return err }
// tar -czf package/{name}-{version}-{goos}-{goarch}.tar.gz target file := fmt.Sprintf("package/%s-%s-%s-%s.tar.gz", options.name, options.version, options.goos, options.goarch) argsNew := []string{"-czf", file} if options.dir != "" { argsNew = append(argsNew, "-C", options.dir) } cmdNew := exec.Command("tar", append(argsNew, options.entry)...) cmdNew.Stdout = os.Stdout cmdNew.Stderr = os.Stderr if err := cmdNew.Run(); err != nil { return fmt.Errorf("package target: %s", err.Error()) } return nil
}, } // some arguments are not used anymore, we keep them to make it compatible // with legacy CI jobs rootCmd.Flags().StringVar(&options.goos, "os", runtime.GOOS, "Target OS of the package") rootCmd.Flags().StringVar(&options.goarch, "arch", runtime.GOARCH, "Target ARCH of the package") rootCmd.Flags().StringVarP(&options.dir, "", "C", "", "Change directory before compress") rootCmd.Flags().StringVar(&options.name, "name", "", "Name of the package (required)") rootCmd.Flags().StringVar(&options.version, "release", "", "Version of the package (required)") rootCmd.Flags().StringVar(&options.entry, "entry", "", "(deprecated) Entry point of the package") _ = rootCmd.MarkFlagRequired("name") _ = rootCmd.MarkFlagRequired("release")
return rootCmd}
复制代码


然后,在 cmd/mirror.go 文件的第 70 行下面增加一行,将新的 pack 子命令添加到 TiUP Mirror 的命令列表中:


newMirrorPackCmd(), // new pack
复制代码

步骤三:编译 TiUP

现在,我们需要编译 TiUP,以确保我们的更改被正确集成。在 /tiup1.15/ 目录下执行以下命令:


make build && cp -rf ./bin/tiup /root/.tiup/bin/tiup
复制代码

步骤四:创建自定义组件

接下来,我们将创建一个自定义组件,并为其编写一个简单的脚本。创建一个名为 jichpack 的组件,并为其编写一个启动脚本:


cat > /component/com-jichengpack/bin/jichpack << EOF#!/bin/shcur=`date +'%Y-%m-%d-%H%M'`echo 'curtime:'$curecho 'this is jichpack component'echo 'this jichpack component '$cur >>/component/com-jichengpack.txtEOF
chmod 755 /component/com-jichengpack/bin/jichpack
复制代码

步骤五:使用 TiUP Mirror Pack

现在,我们可以使用 TiUP Mirror 的新 pack 子命令来打包我们的自定义组件。在 /component/com-jichengpack/ 目录下执行以下命令:


tiup mirror pack -C=bin --name=jichpack --release=1.3 --entry=jichpack
复制代码


执行完毕后,使用 ls -slrt package 查看打包的文件。


结语

通过以上步骤,我们成功地将 TiUP 的包能力集成到了 TiUP Mirror Pack 中,并创建了一个自定义的组件。这为管理和分发自定义 TiDB 组件提供了极大的便利。希望这篇技术分享能够帮助到需要进行类似操作的开发者。




请注意,以上内容是根据您提供的代码片段和指令进行整理和润色的,可能需要根据实际情况进行调整。在实际操作中,请确保遵循最佳实践和安全指南。


发布于: 刚刚阅读数: 4
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
将 TIUP Package 组件能力集成到 TiUP Mirror Pack_TiDB 源码解读_TiDB 社区干货传送门_InfoQ写作社区