跳到主要内容

2 篇博文 含有标签「命令行」

查看所有标签

· 阅读需 6 分钟

本文指导用户使用悦库网盘的yshell命令行客户端,实现对DevOps产物(测试包和发布包)自动归档到悦库网盘中。前提是需要安装并使用悦库服务端。

悦库团队的DevOps实践

悦库网盘产品团队内部DevOps实践中,不断完善产品交付流程自动化,结合使用敏捷式开发,实现了持续快速交付产品。目前每次版本发布时间稳定在2~3周之间。

以下是悦库基于Jenkins的全平台持续交付流水线在2022年4月8日的每日构建运行状态:

image-20220409222701194

发布是单独的流水线,持续交付流水线完成后,可由人工触发,目前只有一个脚本文件,比较简单:

image-20220410130644777

我们认为做好Devops实践是实现敏捷交付的重要前提,尽可能解放团队成员重复劳动,减少不需要的麻烦,尽早发现交付风险。

悦库内盘是悦库团队使用自己的产品搭建的内部文件管理系统,用于团队中的文件管理。

在每日构建和自动发布完成后,使用yshell的命令行自动归档到我们的悦库内盘中,方便大家随时下载测试包和各个版本的发布包。

用yshell实现自动归档

由于悦库流水线的主构建机为Windows Server系统,因此下面示例是在Windows系统上运行的,yshell命令在Windows/Mac/Linux系统上执行效果完全一致。

  1. 配置yshell命令

    参考官方文档

  2. 在悦库网盘中添加一个归档账号

    例如:用户名为 jenkens , 密码 666666 。并设置对归档目标路径 "/公共空间/悦库安装包" 有完全控制权限。

  3. 对测试包/发布包进行归档

    以悦库流水线为例,执行完成后最终会生成5个不同版本的服务端安装包:

    image-20220410122024998

    以下归档脚本 ydiskArchive.bat 功能实现,用户可根据自己环境的实际情况自行修改:

    由于目前yshell不支持上传目录下所有文件功能,因此需要逐个上传,我们后续会逐渐增强功能!

    @echo off
    rem 脚本功能描述
    rem 参数为归档类型:test(测试包)或release(发布包),使用举例:ydiskArchive.bat test
    rem 每日构建执行完成后,将所有生成的测试安装包上传到悦库内盘公共空间的"sprint"目录中。
    rem 自动发布执行完成后,将所有发布包上传到悦库内盘公共空间的"release"目录中。
    rem ysh执行失败会返回非0值,应该从将这个值从脚本中返回,这样Jenkins可以识别错误并中断构建任务。

    rem 切换到当前脚本所在目录
    cd "%~dps0"
    %~d0

    rem 归档方式为test或release
    set ArchiveType=%1

    if "%ArchiveType%"=="" (
    echo "请输入归档类型参数,test或release !".
    exit /b 1
    )
    echo Archive type is %ArchiveType%

    rem 获取当前版本号
    set /p CurrVersion=<../version.txt
    rem 获取当前git分支
    set CurrBranch=""
    for /F %%i in ('git rev-parse --abbrev-ref HEAD') do (set CurrBranch=%%i)
    echo version is %CurrVersion% , git branch is %CurrBranch%

    rem 构建悦库网盘目标路径
    set YDiskPath=""
    if "%ArchiveType%"=="test" (
    set YDiskPath="/公共空间/悦库安装包/sprint/%CurrBranch%"
    )
    if "%ArchiveType%"=="release" (
    set YDiskPath="/公共空间/悦库安装包/release/%CurrVersion%"
    )
    echo YDiskPath is %YDiskPath%

    rem 配置悦库登录地址、用户名称和密码
    ysh user -u http://192.168.0.102:2020 -a jenkens -p 666666
    if not %errorlevel% == 0 (exit /b %errorlevel%)

    rem 在悦库中以分支名称创建文件夹。使用-p参数,如果空间或文件夹不存在会自动级联创建。
    ysh mkdir -p %YDiskPath%

    rem 上传所有安装包,如果包已经存在则会覆盖。要获取历史包可以在该文件的历史版本信息中下载。
    ysh put -f "../output/ydisks_win64_free.exe" %YDiskPath%
    if not %errorlevel% == 0 (exit /b %errorlevel%)
    ysh put -f "../output/ydisks_docker_x64.tar.gz" %YDiskPath%
    if not %errorlevel% == 0 (exit /b %errorlevel%)
    ysh put -f "../output/ydisks_docker_arm64.tar.gz" %YDiskPath%
    if not %errorlevel% == 0 (exit /b %errorlevel%)
    ysh put -f "../output/ydisks_cluster_docker_x64.tar.gz" %YDiskPath%
    if not %errorlevel% == 0 (exit /b %errorlevel%)
    ysh put -f "../output/ydisks_cluster_docker_arm64.tar.gz" %YDiskPath%
    if not %errorlevel% == 0 (exit /b %errorlevel%)
    exit /b 0
  4. 将脚本加入到Jenkins流水线中

    在流水线中的归档任务:

    image-20220411212124790

    归档到悦库内盘后的 "sprint34"期 的测试包:

    img

· 阅读需 7 分钟

什么是yshell ?

yshell 是悦库网盘系统的全平台(Windows、MAC、Linux) CLI客户端,它允许您使用命令行方式上传/下载文件,像操作本地文件一样使用命令行对网盘中的文件进行删除、移动、复制、重命名等操作。因此您可以使用window bat、linux sh、Python、NodeJS等脚本实现对网盘文件自动化管理,因此您也可以在Linux命令行模式下直接操作悦库网盘中的文件。

为什么要发明yshell ?

悦库团队一直提倡以自动化方式解决公司内部高度重复和一致性的工作,让团队成员的宝贵时间能够充分释放到技术创新和业务实施中。

在之前,我们每次发版前需要手动上传包,还要刷新CDN URL以使新包生效,每次发版前问题又比较多,经常需要连续替换多次发布包,费时费力无聊至极,完成后还要归档发布包,结果这个事情经常被忘记~~

我们想做一些有趣的事情,于是写了一些脚本,实现了自动发布和归档,驾驭机器替我们干活感觉棒极了。后来作为持续交付系统的一部分,这些脚本被集成到Jenkins中,实现了自动发布流水线。了解详情查看文章《持续交付加速悦库产品迭代》。

但是...

我们想将发布包归档到悦库内盘中,这样就不需要每次远程登录服务器取包,直接从悦库网盘中下载,也不用担心文件会丢失。

我们还想将每日构建包也归档到悦库内盘中,这样测试人员可以很方便的从悦库内盘中下载测试包。

我们需要更加规范的自动化归档文件命名。

我们还需要定期的清理老去的每日构建包,避免硬盘爆满...

实现这些需求需要悦库提供命令行接口,这样我们可以自己写一些脚本将文件自动归档到悦库网盘中!

是的,让聪明的人,用命令行实现自动化的文件操作,工作轻松有趣,有更多时间享受精彩生活,是我们发明yshell的初衷。

几乎没有学习成本

为了最大程度降低学习成本,yshell的文件操作将兼容Linux标准命令行,这样初学者在完成账号密码的配置后就可以直接像使用命令行操作Linux文件一样操作悦库网盘上的文件,以下举几个例子:

  1. 帮助

    ysh --help
  2. 配置网盘的账号密码,并保存到本地

    ysh user --name "test" --password "666666" --save
  3. 列出文件

    ysh ls /我的空间/文档
  4. 创建文件夹,将本地文件上传到网盘路径下

    ysh mkdir /我的空间/文档/测试/
    ysh put ~/test.txt /我的空间/文档/测试/test.txt
  5. 移动文件

    ysh mv /我的空间/文档/测试/test.txt /协同空间/AVC项目/帮助文档/
  6. 下载网盘文件到本地

    ysh get /我的空间/文档/测试/test.txt ~/文档/
  7. 删除文件

    ysh del /协同空间/AVC项目/帮助文档/test.txt

通过以上例子可以看出,yshell命令行语法简单而熟悉~

没有什么能够阻挡,你对自由的向往

悦库网盘正在努力向全平台客户端推进,覆盖PC、手机、平板等设备,使任意一端都能友好的访问和管理文件,但这些客户端都是面向普通业务型用户。yshell是面向运维和技术型用户的客户端,通过与脚本的结合,可以实现自动化的访问并控制网盘文件,实现自己的管理规则。

例如我们之前的一个大型工程公司的客户需求:

“我们每个工程都有100多份文件材料需要收集,希望定时检测工程目录中的文件,确认收集者都已经提交文件,如果没有提交或文件命名不符合规定就通知他。现在是人工定期检查目录列表,费时费力无聊至极~“。

类似这种需求如果在业务层面只能通过我们定制来完成,需要设计人机交互,且对现有产品功能有一定的侵入,因为其他用户并不需要这个功能。

通过yshell+python ,一个普通的运维技术人员,只需几个小时就完成这样的检查规则编写,然后设置定时任务,定时运行检查。

这样企业就有了自己制定一些简单的文件管理规则的能力,随着业务的变化,自行修改规则即可,省去大量重复单一的文件操作,提高工作效率。