如何多账号使用Git访问CodeHub代码库
引言:在“DevOps能力之屋(Capabilities House of DevOps)”中,华为云DevCloud提出(工程方法+最佳实践+生态)×工具平台=DevOps能力。华为云DevCloud将推出“DevOps on DevCloud”系列,针对DevOps领域场景,阐述该场景在华为云DevCloud上的实施方法与实践。本文由作者与浩初协同完成,对浩初的工作表示感谢。
越来越多的企业或者开发者在使用华为云DevCloud进行软件交付,很多用户在公司项目或者个人项目开发场景,经常需要使用不同的华为云账号通过Git客户端向DevCloud CodeHub提交代码。对于多账号访问CodeHub代码仓库的场景,用户一方面希望减少输入认证凭据(用户名/密码或者SSH密钥)、修改仓库地址等手工操作,另一方面在使用不同的用户名向相应的代码仓库进行提交,例如公司项目的仓库使用某个用户名,而个人项目的仓库使用另一个用户名。
通常情况下,用户第一时间想到的方法是在.ssh目录下配置conf文件中为不同的用户创建对应的密钥。在代码仓库的Git地址中的服务器地址不同时,这种方法是可行的。但是对于华为云DevCloud来讲,不同的代码仓库的服务器地址都是codehub.devcloud.huaweicloud.com,使用这种方法是不可行的,仍然需要修改地址。
如何解决多账户访问使用Git访问CodeHub呢?方案需要结合Git config文件、Conditional includes、Credential helper、HTTS访问方式等能力来实现。首先,让我们先了解一下相关基础知识。
对于Config,Git有3个级别,分别是system、global和local。整个系统有一个system配置,每个用户有一个global配置,而每个git仓库对应一个local配置,只有在仓库目录才能看到此配置文件。一般来讲,可以通过global配置来设置用户信息、密码存储机制等,此配置文件是用户宿主目录下的~/.gitconfig。通过命令git config --global -l查看相关的配置,如图1所示:
图1 git命令查看global配置
Git在2.13.0版本以后提供了conditional includes功能,可以在配置文件中包含另外一个配置文件。详情可以参考https://git-scm.com/docs/git-config。
为了存储认证凭证,Git提供了小帮手Credential helper。Credential Helper主要有manager、wincred和store等几种方式。若安装Git时安装了GitGUI,自动会在system级别中设置credential.helper为manager。
1 准备工作
1.1 安装合适的Git版本
如前所述,此方案需要Git版本不低于2.13,因此首先要确认下是否安装了满足要求的Git版本。
如果没有安装Git,请参考华为云DevCloud帮助中心Git客户端安装与配置。
1.2 创建代码仓库
本文使用了2个华为云DevCloud账号:一个是TenetA,是个人租户账号,一个是TenetB/User1,是企业TenetB的子用户User1。
本文使用了2个代码仓库:(1)个人租户TenetA在项目iBlog中“从模板创建”创建代码仓库NodeJsIBlog,模板为iBlog-OpenSource;(2)企业TenetB子用户User1在GalleryAPP中“从模板创建”创建代码仓库KotlinGallery,模板选择KotlinGallery-OpenSource;
2 多账号访问方案
本部分将涉及本地目录如何规划、如何配置git以实现多账号访问代码仓库。
2.1 规划本地目录
为实现多账号访问,规划好本地目录是非常重要的一步。本地目录结构与文件建议如下:
|--D:
| |--workspace
| |--DevCloud
| |-- TenetA
| |--config_TenetA
| |-- User1
| |--config_User1
本地目录与文件说明如下:
n DevCloud是Git源文件夹,本文涉及的所有代码仓库远端仓库均为DevCloud的CodeHub。
n TenetA是租户TenetA在本地的代码仓库文件夹,其中config_TenetA是此租户的Git配置文件。
n User1是租户TenetB在本地的代码仓库文件夹,其中config_User1是次用户的Git配置文件。
2.2 配置Git
对于租户TenetA的config_TenetA,配置内容如下:
[user]
name = TenetA
email = TenetA@company.com
[credential]
helper = store --file=D:/workspace/DevCloud/TenetA/cred_TenetA
cred_TenetA是TenetA的认证凭据存储文件,用户首次输入用户名密码时将自动创建。
对于租户TenetB的子用户User1的config_User1,配置内容如下:
[user]
name = User1
email = User1@company.com
[credential]
helper = store --file=D:/workspace/DevCloud/User1/cred_User1
cred_User1是企业子用户的密码存储文件,用户输入用户名密码时会自动创建。
接着,在系统当前用户的用户文件夹下,在配置文件.gitconfig文件,修改内容如下:
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[color]
ui = true
#删除内容Start
#[user]
#name = XXX
#email = XXX @company.com
#[credential]
#helper = manager
#删除内容End
#新增内容Start
[includeIf "gitdir:D:/workspace/DevCloud/TenetA/"]
path = D:/workspace/DevCloud/TenetA/config_TenetA
[includeIf "gitdir:D:/workspace/DevCloud/User1/"]
path = D:/workspace/DevCloud/User1/config_User1
#新增内容End
如前文所述,此修改主要是使用conditional includes 的功能,通过includeIf关键字分别针对不同用户引用特定的config文件。
在修改完成后,使用git命令进行确认:
git config --golbal –l
3 场景验证
3.1 使用TenetA拉取NodeJsIBlog
我们可以进入TenetA文件夹,执行如下命令:
git pull https://codehub.devcloud.cn-north-4.huaweicloud.com/iBlog00002/NodeJsIBlog.git
需要指出的是本处使用HTTPS方式访问代码仓库。代码仓库的HTTPS地址可以从DevCloud CodeHub的代码仓库列表中获取,如下图所示:
执行上述的pull命令后,会提示输入用户名、密码,如下图所示:
用户名与密码从DevCloud的CodeHub中获取,如下图所示:
输入用户名、密码后,点击OK按钮,应该可以成功拉取代码,如下图所示:
3.2 使用User1拉取KotlinGallery
进入TenetA文件夹,执行如下命令:
git pull https://codehub.devcloud.cn-north-4.huaweicloud.com/GalleryAPP00001/KotlinGallery.git
注意:这里需要使用代码仓库的HTTPS地址,文中地址可以从DevCloud的CodeHub中进行获取,如下图所示
执行上述的pull命令后,会提示输入用户名、密码,如下图所示:
注意:这里的用户名密码可以从DevCloud的CodeHub中进行获取,如下图所示:
输入用户名、密码后,点击OK按钮,成功拉取代码,如下图所示:
3.3 使用User1向KotlinGallery提交代码
进入KotlinGallery文件夹,修改任意文件,然后执行如下命令:
git status
git add *
git commit -m "gradle file modify"
git push
执行完毕后,可以通过以下两种方式进行验证,
方式一:执行git log指令
方式二:进入华为云DevCloud的CodeHub的相应仓库进行查看,如下图所示:
3.4 使用TenetA向NodeJsIBlog提交代码
进入NodeJsIBlog文件夹,修改任意文件,然后执行如下命令
git status
git add *
git commit -m "file app.js modify"
git push
执行完毕后,可以通过以下两种方式进行验证,
方式一:执行git log指令
方式二:进入华为云DevCloud的CodeHub的相应仓库进行查看,如下图所示
至此,本文实现了多账号使用Git访问CodeHub,希望本方案可以帮助大家更好地使用华为云DevCloud的代码托管服务。在多账号访问CodeHub的情景下,大家务必遵守公司的信息安全要求,并定期修改华为云DevCloud代码仓库HTTPS的用户密码,降低安全风险。
华为云DevCloud作为一站式云端DevOps平台,集成华为近30年研发实践和前沿理念,面向开发者提供研发工具服务,让软件开发简单高效。
- 点赞
- 收藏
- 关注作者
评论(0)