如何获取已部署服务的gitlab标签?

How to get gitlab tag of deployed service?

我正在构建一个 spring 引导服务。我发布的每个版本都标有特定的版本号

现在我可以选择其中一个版本来部署它们。 但是有没有办法向部署的服务询问他的版本号?我希望能够发送例如API 对我部署的服务的请求 (GET service/version) 并接收标记名(例如 v2.0.0)作为响应。

一个想法是为每个新的标记版本触发一个新的管道,在那里我必须重建服务并将标记名添加到我的服务根目录中的文件中。然后我可以构建一个 API 以在请求时将文件发送给我。有没有我忽略的更简单的方法?

我是这样解决的:

  1. 告诉 Spring 引导查找变量,例如RELEASE_VERSION -> Spring 不会在其代码中找到它并在部署环境中自动查找它 -> 在我的例子中,我有一个 manifest-my-company.yml 文件,我在其中创建了一个环境变量 RELEASE_VERSION: '((RELEASE_VERSION))'。但我不确定这是否特定于 我的公司。

  2. 创建一个API即returns这个变量的值:

    @RestController
    public class GetVersionController implements GetVersionApi {
    
      @Value("${RELEASE_VERSION:no version number available}") //"no version number available" is the dafault value
      private String releaseVersion;
    
      @Override
      public String getVersion() throws IOException {
        return releaseVersion;
      }
    }
    
  3. 现在在部署服务时将提交标记值作为该变量传递。在我的例子中,我使用公司脚本部署到 Cloud Foundry,并且可以简单地在我的 gitlab-ci.yml 规范中添加变量:

    deploy to prod:deploy to prod:
      extends: .deploy_to_prod
      script:
      - deploy_to_cf.sh RELEASE_VERSION=${CI_COMMIT_TAG}
      ...