我想简化内部gem的部署到我们的私有Github rubygems注册中心。大多数情况下,在gemspec文件中,版本是硬编码或从另一个文件中读取的。这意味着,一旦您的代码库准备就绪,就要发布一个新版本,您必须创建一个拉请求,修改版本,合并,然后最后发布。
此工作流与我们的monorepo中的其他服务不匹配。最后,一旦我们想要发布,我们就创建一个分支发布/服务名称/v1.2,它触发了一个Github部署和一个专用的CI管道,在这里我们可以检索要发布的版本的名称。
因此,对于我们的创业板,我考虑使用一个环境变量来设置版本,当调用gem构建rubocop-xxxxx时,如下所示:
Gem::Specification.new do |spec|
spec.platform = Gem::Platform::RUBY
spec.name = 'rubocop-xxxxx'
spec.metadata = {
'github_repo' => 'ssh://github.com/xxxxx/monorepo',
'allowed_push_host' => 'https://rubygems.pkg.github.com/xxxxx',
'source_code_uri' => 'https://github.com/xxxxx/monorepo/tree/main/packages/common/rubocop'
}
spec.version = ENV['PACKAGE_RELEASE_VERSION'] || "0.0.0"
spec.platform = Gem::Platform::RUBY
spec.required_ruby_version = '>= 2.7'
spec.files = Dir[
'rubocop.yml',
'conf/**/*',
'*.gemspec',
'Gemfile',
]
spec.add_dependency('rubocop-performance', '~> 1.13.3')
spec.add_dependency('rubocop-rails', '~> 2.14.2')
spec.add_dependency('rubocop-rake', '~> 0.6.0')
spec.add_dependency('rubocop-rspec', '~> 2.9.0')
spec.add_dependency('rubocop-shopify', '~> 2.5.0')
end这里的0.0.0回退是为了避免在运行Gemfile.lock时生成bundle install时出现问题。
有这样的宝石规格可以吗?或者我以后能看一些问题吗?
发布于 2022-04-14 15:49:21
我将而不是使用环境变量来设置gem版本。
如果您的目标是在最终发布rubocop-xxxxx gem之前在服务中测试它的发布候选版本,则可以在Gemfile中使用path 选项而不是发布每个更改。
示例
Gemfile:
gem "rubocop-xxxxx", path: <path-to-the-gem>当gem的版本按预期工作时,释放它(带有硬编码的版本号),再次从Gemfile中删除Gemfile选项并指定释放的version。
示例
Gemfile:
gem "rubocop-xxxxx", "~> 1.1"https://stackoverflow.com/questions/71872028
复制相似问题