# CLI 命令

    # 命令说明

    --interactive:布尔类型,指定 CLI 是否采用交互式,默认值为 true

    --remote:字符串类型,指定 CLI 用于获取 Erda 代码仓库的 Remote 名称,默认值为 origin。在未指定 Erda 地址的情况下,若 CLI 的工作目录为 Erda 应用的代码仓库,则将根据 Remote 名称获取 Git 地址并解析出组织(Org)、项目(Project)和应用(Application)信息。

    --host:字符串类型,指定 CLI 访问的 Erda 地址。CLI 本质为访问 Erda 的 OpenAPI 地址,因此若设置为 https://erda.cloud,CLI 将转换为访问 https://openapi.erda.cloud

    --username:用户名,指定 CLI 访问 Erda 平台的登陆用户。

    --password:密码,指定 CLI 访问 Erda 平台的登陆密码。

    全部参数示意如下:

    Global Flags:
          --host string       Erda host to visit (e.g. https://erda.cloud)
          --interactive       if true, interactive with user (default true)
      -p, --password string   Erda password to authenticate
      -r, --remote string     the remote for Erda repo (default "origin")
      -u, --username string   Erda username to authenticate
      -V, --verbose           if true, enable verbose mode
    

    # erda-cli version

    $ erda-cli version
    Version: 1.4
    BuildTime: 2021-11-17 01:01:59
    GoVersion: go version go1.15.15 linux/amd64
    CommitID: 02583bd49fc57841bdcb05b02486e27dd868cf00
    DockerImage:
    

    # erda-cli clone

    您可以通过 clone 命令克隆 Erda 平台上的项目。

    $ erda-cli clone https://erda.cloud/trial/dop/projects/599
      Application 'echo-service' cloning ...
      Application 'echo-service' cloned.
      Application 'echo-web' cloning ...
      Application 'echo-web' cloned.
    ✔ Project 'bestpractice' and your applications cloned.
    

    参数说明如下:

    Args:
       url               project url
    Flags:
           --cloneApps   if false, don't clone applications in the project (default true)
    

    # erda-cli issue

    您可以通过 issue 命令列出项目协同中的待办事项。

    // 进入项目空间
    $ cd bestpractice
    
    $ erda-cli issue
    ISSUEID   FINISHDATE   STATE    ISSUENAME
    298064    2022-03-31   待处理   实现公司统一单点登录
    298068    2022-03-30   待处理   移动端登陆认证
    298067    2022-03-28   待处理   用户身份统一认证
    

    参数说明如下:

    Flags:
          --bug             if true, list bugs
          --no-headers      if true, don't print headers (default print headers)
          --page-size int   the number of page size (default 10)
          --requirement     if true, list requirements
          --task            if true, list tasks
    

    您可以通过 --bug 指定事项类型为缺陷,通过 --requirement 指定事项类型为需求,通过 --task 指定事项类型为任务。

    # erda-cli issue fix

    您可以通过 issue fix 命令创建代码分支以处理项目协同中的待办事项。

    $ erda-cli issue fix 298067 --application echo-service --branch feature/auth
    [INFO] No base branch set, use branch 'master'.
    [INFO] Switched to a new branch 'feature/auth'
    [INFO] [feature/auth f7add11] init branch 'feature/auth'
    [INFO] remote:
    remote: Create a pipeline request for 'feature/auth' on Erda by visiting:
    remote:      https://erda.cloud/trial/dop/projects/599/pipelines/list
    remote:
    To https://erda.cloud/trial/dop/bestpractice/echo-service
     * [new branch]      feature/auth -> feature/auth
    Branch 'feature/auth' set up to track remote branch 'feature/auth' from 'origin'.
    [INFO] Branch 'feature/auth' created in application 'echo-service' to fix issue '298067'.
    

    该命令将在应用的 echo-service 目录下创建 Git 分支 feature/auth 并提交至 Erda 代码仓库,同时在事项 298067 中添加评论,关联代码分支便于跟踪。

    参数说明如下:

    Args:
          issue-id               id of issue to fix
    Flags:
          --application string   name of the application
          --base-branch string   branch as base to create from
          --branch string        branch to create and checkout
    

    您可以通过 --application 指定创建代码分支的应用(若当前工作目录已是应用目录,可忽略),通过 --branch 指定代码分支名称,通过 --base-branch 指定基础分支(默认为 Master 分支)。

    # erda-cli issue open

    您可以通过 issue open 命令在浏览器中打开具体事项的页面。

    $ erda-cli issue open 298067
    ✔ Open issue '298067' in browser.
    

    参数说明如下:

    Args:
          issue-id               id of issue to open
    

    # erda-cli issue close

    您可以通过 issue close 命令关闭事项。

    $ erda-cli issue close 298067 --man-hour=2h
    ✔ Issue '298067' closed.
    

    参数说明如下:

    Flags:
          --man-hour string   time for work, in format of 2m/2h/2d/2w
    

    您可以通过 --man-hour 指定使用的工时。

    # erda-cli mr create

    您可以通过 mr create 命令创建合并请求。

    $ erda-cli mr create --from=feature/auth --to=master --title='auth service' --description='all auth handle by the same service'
    [INFO] source branch feature/auth, target branch master
    [INFO] Merge request created.
    [INFO] To https://erda.cloud/trial/dop/projects/599/apps/7097/repo/mr/open/1
    

    参数说明如下:

    Flags:
          --application string   name of the application
          --description string   desc of merge request
          --from string          branch contains source code
          --issue-id uint        relate issue id
          --open                 if true, open merge request page in browser
          --remove               if true, remove merge source branch (default true)
          --title string         title of merge request
          --to string            branch contains base code
    

    您可以通过 --title 指定合并请求的标题,通过 --description 描述合并请求的内容,通过 --from 指定合并请求的源代码分支,通过 --to 指定目标代码分支,通过 --application 指定应用(若当前工作空间为应用目录,则无需指定)。

    # erda-cli push

    您可以通过 push 命令将应用推送至 Erda 平台。

    $ erda-cli push https://erda.cloud/trial/dop/projects/599 --application new-app
      Application 'new-app' pushed.
    ✔ Project 'bestpractice' pushed to server https://openapi.erda.cloud.
    

    参数说明如下:

    Args:
      url                         project url
    Flags:
          --all                   if true, push all applications
          --application strings   applications to push
          --configfile string     config file contains applications
          --force                 if true, git push with --force flag
      -h, --help                  help for push
    

    # erda-cli create

    您可以通过 create 命令在 Erda 上创建项目。

    $ erda-cli create --host https://erda.cloud --org erda -n demo-project -d 'demo project' --init-package project_package_20220310194452.zip
    Enter your erda username: <Your Username>
    Enter your erda password: <Your Password>
      Devops project demo-project creating...
      Devops project demo-project created.
      Msp tenant demo-project creating...
      Msp tenant demo-project created.
      Project package importing...
      Project package importing...
      Project package imported.
    ✔ Project 'demo-project' created.
    

    参数说明如下:

    Flags:
      -d, --description string    description of the project
          --init-package string   package for init the project
      -n, --name string           the name of the project
          --org string            the name of an organization
          --wait-import int       minutes wait for package to be import (default 1)
    

    # erda-cli build

    您可以通过 build 命令构建 Erda 上的应用。

    $ erda-cli build <path-to/pipeline.yml> --host=https://erda.cloud -u 'YourName' -p 'YourPassword'
    ✔ building for branch: feature/echo-web, pipelineID: 12639533, you can view building status via `erda-cli status -i <pipelineID>`
    

    参数说明如下:

     Flags:
          --branch string   branch to create pipeline, default is current branch
      -h, --help            help for build
      -w, --watch           watch the status
    

    --watch 可持续观察应用的构建过程。

    # erda-cli view

    您可以通过 view 命令构建 Erda 上的应用。

    $ erda-cli view -i 12639533
    ✹ Stage 0
        ✔ Success task: git-checkout
    ✹ Stage 1
        ✔ Success task: java
    ✹ Stage 2
        ✔ Success task: release
    ✹ Stage 3
        ☕ Run task: dice
        ✔ Success task: dice
    
    build succ, time elapsed: 00:02:15
    Pipeline progress (current/total): 4/4
    PIPELINEID   TASKID     TASKNAME       TASKSTATUS   STARTEDAT
    12918029     10940839   git-checkout   Success      2021-12-20 15:46:09
    12918029     10940840   java           Success      2021-12-20 15:46:35
    12918029     10940854   release        Success      2021-12-20 15:46:53
    12918029     10940877   dice           Success      2021-12-20 15:46:58
    

    参数说明如下:

    Flags:
      -b, --branch string     specify branch to show pipeline status, default is current branch
      -h, --help              help for view
      -i, --pipelineID uint   specify pipeline id to show pipeline status
      -w, --watch             watch the status
    

    # erda-cli ext

    您可以通过 ext 命令罗列 Erda 上所有的 Extension。

    erda-cli ext --host=https://erda.cloud -u 'YourName' -p 'YourPassword'
    ID                            TYPE     CATEGORY                  PUBLIC   UPDATED_AT
    canal                         addon    database                  true     2021-11-18 01:12:56
    consul                        addon    distributed_cooperation   true     2021-11-18 01:12:56
    terminus-elasticsearch        addon    search                    true     2021-11-18 01:13:17
    kafka                         addon    message                   true     2021-11-18 01:12:57
    

    # erda-cli ext pull

    您可以通过 ext pull 命令获取 Erda 上的 Extension。

    $ erda-cli ext pull --host=https://erda.cloud -u 'YourName' -p 'YourPassword' git-checkout@1.0 -o git-checkout
    ✔ extension pull success
    

    参数说明如下:

    Flags:
      -o, --output string   which directory to export to
    

    # erda-cli ext push

    您可以通过 ext push 命令更新 Erda 上的 Extension。该操作需由平台管理员执行。

    $ erda-cli ext push --host=https://erda.cloud -u 'YourName' -p 'YourPassword' -d git-checkout
    ✔ extension git-checkout push success
    

    参数说明如下:

    Flags:
      -a, --all               override exist extension and version,must with -f
      -d, --dir string        extension dir
      -f, --force             override exist version
      -r, --registry string   new registry
    

    # erda-cli migrate

    您可以通过 migrate 命令管理 MySQL 数据库中的数据变更。

    $ erda-cli migrate -h
    erda-cli migrate --mysql-host localhost --mysql-username root --mysql-password my_password --database erda
    
    Usage:
      erda-cli migrate  [flags]
      erda-cli migrate [command]
    
    Examples:
      $ erda-cli migrate --mysql-host localhost --mysql-username root --mysql-password my_password --database erda
    
    Available Commands:
      lint        Erda MySQL Migration lint
      mkpy        make a python migration script pattern
      record      manually insert the migration record
    
    Flags:
          --database string         [MySQL] database to use. env: ERDA_MYSQL_DATABASE
          --debug-sql               [Migrate] print SQLs
      -h, --help                    help for migrate
          --lint-config string      [Lint] Erda MySQL Lint config file
          --modules strings         [Lint] the modules for migrating
          --mysql-host string       [MySQL] connect to host. env: ERDA_MYSQL_HOST
          --mysql-password string   [MySQL] password to use then connecting to server. env: ERDA_MYSQL_PASSWORD
          --mysql-port int          [MySQL] port number to use for connection. env: ERDA_MYSQL_PORT (default 3306)
          --mysql-username string   [MySQl] user for login. env: ERDA_MYSQL_USERNAME
          --output string           [Migrate] the directory for collecting SQLs
          --sandbox-port int        [Sandbox] sandbox expose port. env: ERDA_SANDBOX_PORT (default 3306)
          --skip-lint               [Lint] don't do Erda MySQL Lint
          --skip-mig                [Migrate] skip doing pre-migration and real migration
          --skip-pre-mig            [Migrate] skip doing pre-migration
          --skip-sandbox            [Migrate] skip doing migration in sandbox
    
    Global Flags:
          --host string       Erda host to visit (e.g. https://erda.cloud)
          --interactive       if true, interactive with user (default true)
      -p, --password string   Erda password to authenticate
          --remote string     the remote for Erda repo (default "origin")
      -u, --username string   Erda username to authenticate
      -V, --verbose           if true, enable verbose mode
    
    Use "erda-cli migrate [command] --help" for more information about a command.
    

    # erda-cli config

    您可以通过 config 命令在 Erda 上为指定组织下的指定项目设置、更新、查询或删除指定 Workspace 支持的功能,包括开启 ECI,后续还将支持更多的功能,例如自动扩缩容 HPA/VPA 等。

    $ erda-cli config  --help 
    Config Project workspace configurations operation,including set, get, update, delete
    
    Usage:
      erda-cli config [command]
    
    Examples:
      erda-cli config
    
    Available Commands:
      delete      delete project workspace config
      get         get project workspace config
      set         set project workspace config
      update      update project workspace config
    

    # erda-cli config set

    您可以通过 set 命令设置指定组织下指定项目的指定 Workspace 支持的功能,例如开启 ECI。

    $ erda-cli  config set  --help 
    set project workspace config
    
    Usage:
      erda-cli config set <feature> [flags]
    
    Examples:
      $ erda-cli config set HPA=enable --org xxx --project yyy --workspace DEV
    

    其中,feature 为 key=value 的格式设置,若同时设置多个,请用逗号隔开,例如 key1=value1,key2=value2

    如需为 erda-demo 组织下 testeci 项目的 DEV Workspace 设置功能 ECI 为 enable,则命令如下:

    $ erda-cli config set ECI=enable --host=https://erda.cloud -u 'YourName' -p 'YourPassword' --org erda-demo --project testeci  --workspace DEV
    ✔ config set success 
    

    # erda-cli config get

    您可以通过 get 命令获取指定组织下指定项目的指定 Workspace 支持的功能信息。

    $ erda-cli  config get  --help 
    get project workspace config
    
    Usage:
      erda-cli config get  [flags]
    
    Examples:
      $ erda-cli config get --org xxx --project yyy --workspace DEV
    

    如需获取 erda-demo 组织下 testeci 项目的 DEV Workspace 当前的功能详情,则命令如下:

    $ erda-cli  config  get --host --host=https://erda.cloud  -u 'YourName' -p 'YourPassword' --org erda-demo --project testeci  --workspace DEV
    [INFO] Configs get result: {"ECI":"enable"}
    ✔ config get success
    

    # erda-cli config update

    您可以通过 update 命令更新指定组织下指定项目的指定 Workspace 支持的功能,例如关闭 ECI。

    $ erda-cli  config update  --help 
    update project workspace config
    
    Usage:
      erda-cli config update <feature> [flags]
    
    Examples:
      $ erda-cli config update ECI=disable --org xxx --project yyy --workspace DEV
    

    其中, feature 为 key=value 的格式设置,若同时设置多个,请用逗号隔开,例如 key1=value1,key2=value2

    如需为 erda-demo 组织下 testeci 项目的 DEV Workspace 更新功能 ECI 为 disable,则命令如下:

    $ erda-cli config update ECI=disable --host=https://erda.cloud -u 'YourName' -p 'YourPassword' --org erda-demo --project testeci  --workspace DEV
    ✔ config set success 
    

    # erda-cli config delete

    您可以通过 delete 命令删除指定组织下指定项目的指定 Workspace 支持的所有功能。若未指定 Workspace,则表示删除指定组织下指定项目的所有 Workspace 已设置的信息。

    delete 命令不支持删除功能列表中的具体项,例如功能列表支持 ECI 和 HPA,则无法仅删除 HPA 而保留 ECI。此类情况下请使用 update 命令,将需删除的 HPA 设置为 disable 即可。

    $ erda-cli  config delete  --help 
    delete project workspace config
    
    Usage:
      erda-cli config delete  [flags]
    
    Examples:
      $ erda-cli config delete --org xxx --project yyy  --workspace DEV 
      $ erda-cli config delete --org xxx --project yyy
    

    如需删除 erda-demo 组织下 testeci 项目的 DEV Workspace 的所有功能,则命令如下:

    $ erda-cli config delete --host=https://erda.cloud -u 'YourName' -p 'YourPassword' --org erda-demo --project testeci  --workspace DEV
    ✔ config delete success
    

    # erda-cli project-deployment

    您可以通过 project-deployment 命令在 Erda 上对指定组织下指定项目的指定 Workspace 下已部署的所有应用实例(及其 Addon 组件)进行停止或启动操作。

    • 停止:表示将已部署的所有应用实例(及其 Addon 组件)的副本数(Pod 数量)设置为 0,删除对应 Pod,但保留 Pod 所属的控制器如 StatefulSet、Deployment、CRD 等,仅设置副本数为 0。
    • 启动:表示将已部署且已停止的所有应用实例(及其 Addon 组件)的副本数(Pod 数量)由 0 恢复至停止前的状态。

    通过 project-deployment stop 命令可快速释放集群资源,通过 project-deployment start 命令可快速恢复部署实例及其 Addon 至停止前的状态。

    $ erda-cli project-deployment  --help 
    Project workspace deployment operation, including stop, start
    
    Usage:
      erda-cli project-deployment [command]
    
    Examples:
      dice project-deployment
    
    Available Commands:
      start       start project's runtimes and addons
      stop        stop project's runtimes and addons
    

    # erda-cli project-deployment stop

    您可以通过 stop 命令停止指定组织下指定项目的指定 Workspace 下已部署的所有应用实例(及其 Addon 组件)的副本数(Pod 数量)设置为 0,删除对应 Pod,但保留 Pod 所属的控制器如 StatefulSet、Deployment、CRD 等,仅设置副本数为 0。

    $ erda-cli project-deployment stop --help 
    stop project's runtimes and addons
    
    Usage:
      erda-cli project-deployment stop  [flags]
    
    Examples:
      $ erda-cli project-deployment stop --org xxx  --project yyy --workspace DEV
    

    如需停止 erda-demo 组织下 testeci 项目的 DEV Workspace 的所有应用实例及其 Addon,则命令如下:

    $ erda-cli project-deployment stop --host=https://erda.cloud -u 'YourName' -p 'YourPassword' --org erda-demo --project testeci  --workspace DEV
    [INFO] Project's applications IDs to stop is:[6 5]
    [INFO] Begin to stop project's runtimes for runtime IDs:[186]
    [INFO] Waitting 1 minutes for project's runtimes to Terminating        
    ✔ project-deployment stop project's runtimes success
    [INFO] No addons found for project to stop
    ✔ project-deployment stop project's addons success
    

    提示

    • Addon 和 Runtime 的停止有顺序依赖,优先停止 Runtime,并等待一分钟确保 Runtime 对应的 Pod 均已删除,随后停止 Addon。该执行过程可在命令执行输出中查看处理顺序。
    • 目前不支持停止 6.8.9 和 6.8.22 版本以上的 Elasticsearch 的 Addon。

    # erda-cli project-deployment start

    您可以通过 start 命令重新启动指定组织下指定项目的指定 Workspace 下已部署的所有应用实例(及其 Addon 组件),对应的所有应用实例(及其 Addon 组件)的副本数(Pod 数量)由 0 恢复至停止前的状态。

    $ erda-cli project-deployment start --help 
    start project's runtimes and addons
    
    Usage:
      erda-cli project-deployment start  [flags]
    
    Examples:
      $ erda-cli project-deployment start --org xxx --project yyy --workspace DEV
    

    如需启动 erda-demo 组织下 testeci 项目的 DEV Workspace 的所有应用实例及其 Addon,则命令如下:

    $ erda-cli project-deployment start --host=https://erda.cloud -u 'YourName' -p 'YourPassword' --org erda-demo --project testeci  --workspace DEV
    [INFO] Project's applications IDs to start is:[6 5]
    [INFO] Begin to start project's addons for addon IDs:[o35a6a94a48b749f59b0258de68825727 s3746b6adfbce415ab4ca74c0b0f28fbe]
    [INFO] Successed to start all addons: [o35a6a94a48b749f59b0258de68825727 s3746b6adfbce415ab4ca74c0b0f28fbe]
    [INFO] Waitting 3 minutes for project's addons to Running
    ✔ project-deployment start project's addons success
    [INFO] Begin to start project's runtimes for runtime IDs:[186]
    ✔ project-deployment start project's runtimes success
    

    提示

    • Addon 和 Runtime 的停止有顺序依赖,优先停止 Runtime,并等待一分钟确保 Runtime 对应的 Pod 均已删除,随后停止 Addon。该执行过程可在命令执行输出中查看处理顺序。
    • 目前不支持启动 6.8.9 和 6.8.22 版本以上的 Elasticsearch 的 Addon。