标签: continuous-delivery

jenkins持续交付共享工作区

背景:

我们有一个Jenkins工作(Production)每晚构建一个可交付成果.我们还有另一项工作(ProductionPush)将第二天通过专有协议将可交付成果推送到生产机器.这是因为某些生产机器仅在白天的某些时段可用(它还使我们有机会修复任何最后一刻的构建中断). ProductionPush需要访问Production作业构建的可交付成果(因此需要访问相同的工作区).我们有多个节点和并发构建(因此不可预测的工作空间),并且由于资源有限,因此不希望将作业绑定到固定节点/工作空间.

问题:

  1. 如何确保两个作业共享相同的工作区并确保ProductionPush仅在Production成功的情况下在第二天的固定时间运行- 而不是将两个作业都修复为在同一节点/工作区之外运行?我知道参数化触发插件可能有助于其中一些,但它似乎没有时间延迟功能,12小时似乎太长时间安静.

  2. 共享工作区是个坏主意吗?

workspace triggers jenkins continuous-delivery

7
推荐指数
1
解决办法
1万
查看次数

使用GitLab CI持续交付

我一直试图围绕如何使用GitLab CI实现持续交付?

我为CD读取的每个解决方案都依赖于多步骤流水线(例如Jenkins),或者是一个自定义应用程序,它可以监听webhook并提供自己的部署界面(例如,GitHub的HuBot + Heaven + Janky).

如果我们只关心在Master分支上执行CD,并且我们的测试套件/部署步骤非常快,您可以简单地将其作为由GitLab CI运行的shell脚本的一部分包含....但是,如果您的测试怎么办?套房不快?或者您的部署可能需要几分钟才能下载软件包等?然后你的CI Runner正在忙着处理事情.

我能想出的最佳解决方案是:

  1. 创建一个Web应用程序,接受来自GitLab和GitLab CI的Web Hook,并跟踪每个单独的提交和构建状态.
  2. 启动自己的自定义运行程序,尝试为收到的每个传递的webhook执行分段站点的传递.应用程序可以使用例如fabistrano,以便于部署/回滚.
  3. 在GitLab中监听合并请求以合并到通过所有测试的GITLab中.

有什么想法吗?有没有人用GitLab CI实现CD?

git continuous-integration webhooks continuous-delivery gitlab-ci

7
推荐指数
1
解决办法
6158
查看次数

构建促销:您如何管理依赖项?

我试图了解将我们的Java项目从Snaphot/Release策略切换到构建促销的所有含义.

一个明显的步骤是每个构建最终会创建一个可能一直到生产环境的工件,因此不再存在快照.但是,我应该如何管理从项目到其他工件的链接,这可能会也可能不会被允许进行生产?

我很难找到关于这个特定主题的有价值的信息.当然,构建促销的内容很多,但是根据迁移到构建促销的依赖管理的可见性较低.

我看到两个选择:

  • 人们只能依赖先前提升到生产环境的工件
  • 当一个依赖于另一个工件时,构建的工件只能转到其依赖项的最后一个环境.也就是说,如果我依赖于允许进行测试而不是生产的工件,那么我的构建将不会被允许进行生产

是否有关于此主题的行业标准?还是最佳实践?

非常感谢你的帮助 :)

编辑:我们向Artifactory部署了三种工件:

  • 图书馆

  • 耳朵

  • EAR内的模块.其中一些是任何想要与当前构建的EAR交互的EAR所需的"公共"层

我们将EAR部署到JEE服务器.我们的库和公共层部署到Artifactory并打包在EAR中,因此它们不直接部署在JEE容器上.

一个项目构建了几个模块,所有内容都包含在EAR中,以及它的依赖项.一个项目可以依赖于另一个项目的模块,这就是它变得复杂的地方......

java continuous-integration artifactory continuous-deployment continuous-delivery

7
推荐指数
1
解决办法
154
查看次数

Flux v2 是 Argo Flux 的替代品吗

我已经使用Flux v2设置了持续交付管道(因为 Flux v1 已弃用),并且运行良好。另一方面,我看到 Argo 和 Flux 在 2019 年底开始合并(请检查此链接)。

我想知道 Flux v2 是否是 Argo-Flux 合并的演变,或者它们是两个独立的 GitOps 实现选项。

我的印象是 Flux v2 非常活跃,所以我想它是一个真正的选择,并且至少会存在一段时间。但我对 Argo-Flux 不了解,也找不到太多信息。

谢谢!

continuous-deployment continuous-delivery argoproj fluxcd gitops

7
推荐指数
1
解决办法
2835
查看次数

如何通过 terraform 中的 mongodbatlas 提供程序获取完整的 uri,包括用户名和密码

当我尝试使用 Terraform 和 mongodb atlas 提供程序输出 mongodb uri 时,我无法获取包含用户名和密码的完整 uri。例如,当我做类似的事情时:

terraform {
  required_version = "~> 0.14.7"

  required_providers {
    mongodbatlas = {
      source  = "mongodb/mongodbatlas"
      version = "0.8.2"
    }
  }
}

provider "mongodbatlas" {
  public_key  = var.mongodbatlas_public_key
  private_key = var.mongodbatlas_private_key
}

data "mongodbatlas_cluster" "db" {
  project_id = var.mongodbatlas_project_id
  name       = format("some-db-name-%s", var.env)
}

output "db_url" {
  value = data.mongodbatlas_cluster.db.connection_strings[0].address_srv
}
Run Code Online (Sandbox Code Playgroud)

我总是得到以下形式的 uri:mongodb+srv://some-db-name-staging.xjcol.mongodb.net 将其作为环境变量添加到我的 Web 应用程序中以连接到数据库不起作用,因为它需要使用用户名和密码进行身份验证。手动将用户名和密码添加到该字符串中mongodb+srv://[username]:[password]@some-db-name-staging.xjcol.mongodb.net,应用程序可以正常连接到数据库。

mongodb continuous-deployment continuous-delivery terraform mongodb-atlas

7
推荐指数
1
解决办法
1597
查看次数

并行开发分支,构建工件存储库和QA版本

VCS中的并行开发/分支如何影响构建工件存储库设置和QA的发布?

在我们公司,我们分支我们的VCS进行并行开发工作,我们通常没有太多关于哪个分支将按哪种顺序发货的警告.

对于版本编号,我想放置一个分支标识符来显示QA构建来自哪个分支.来自主干的任何构建都将具有"正常"版本号,其中没有分支标识符:

trunk: 1.1.0
branch: 1.1.0.MyBranch
branch: 1.1.0.AnotherBranch
Run Code Online (Sandbox Code Playgroud)

最初我认为每个分支都有一个构建工件存储库,以及一个主干存储库.

但是如果我的版本编号包含分支,则产品的版本号将是错误的(如果我正在构建并从分支中释放).

围绕这个的方式只能从行李箱中释放出来吗?

另外,我应该从什么时候开始发货QA团队从主干构建而不是从分支构建?

我目前的想法是说服管理层将一个开发团队分配给一个发布订单(比如发布一周后)并将他们的分支合并到主干.然后QA开始获得主干版本而不是分支构建,并且其分支已经合并的开发团队直接修复了主干中的任何错误而不是分支.

*更新*

更具体地说,我正在使用SVN for VCS,以及Artifactory用于我的存储库.我正在使用Ivy进行依赖管理.

查看存储库布局(存储库布局)上的Artifactory帮助:

"a sequence of literals that identifies the base revision part of the artifact 
 version, excluding any integration information"
"'1.5.10', or in case of an integration revision '1.2-SNAPSHOT' the base revision
  is '1.2'"
Run Code Online (Sandbox Code Playgroud)

这个以及Maven和Ivy的默认布局告诉我这是更常见的:

MyRepo
 MyLib
  1.1.0 (this is the dll from trunk)
   -MyLib.dll
  1.1.0.MyBranch-SNAPSHOT (dev builds from the "MyBranch" branch)
   -MyLib.dll
  1.1.0.AnotherBranch-SNAPSHOT (dev builds from the "AnotherBranch" branch)
   -MyLib.dll …
Run Code Online (Sandbox Code Playgroud)

version-control continuous-integration artifacts continuous-delivery

6
推荐指数
1
解决办法
1210
查看次数

我可以从arbritrary阶段恢复Maven生命周期吗?

我想说服Maven"继续它离开的地方".我首先做一个mvn package构建包.稍后我可能希望通过执行a来继续生命周期来进行集成测试等mvn install.在这种情况下,我希望Maven不要从一开始就重新开始生命周期,而是在第一阶段package(即pre-integration-test)之后重新开始.是否有可能在第一阶段以外的阶段开始生命周期?

java maven continuous-delivery

6
推荐指数
1
解决办法
740
查看次数

如何使用 Azure Pipelines 自动增加 Android 应用程序的构建 ID 和版本号

这是我的 build.gradle

defaultConfig {
        applicationId "com.xyz.abc.na"
        minSdkVersion 16
        targetSdkVersion 29
        versionCode 36
        versionName "5.0.2"
        multiDexEnabled true
    }
Run Code Online (Sandbox Code Playgroud)

在我的 YML 中,我有

 - task: android-manifest-version@1
  displayName: 'Version Update'
  inputs:
  sourcePath: '$(manifestDirectory)'
  versionCodeOption: 'buildid'
  versionCode: '$(Build.BuildId)'
  versionCodeOffset: '1'
  printFile: true

  - task: Gradle@2
    displayName: 'Building Gradle'
    inputs:
      workingDirectory: ''
      gradleWrapperFile: 'gradlew'
      gradleOptions: '-Xmx3072m'
      publishJUnitResults: false
      testResultsFiles: '**/TEST-*.xml'
      tasks: $(gradleTask)
      codeCoverageToolOption: 'None'
      javaHomeOption: 'JDKVersion'
      jdkVersionOption: 'default'
      jdkArchitectureOption: 'x64'
      checkStyleRunAnalysis: false
      findBugsRunAnalysis: false
Run Code Online (Sandbox Code Playgroud)

除非我手动更改build.gradle 中的versionCode和 ,versionName否则这些值永远不会自动更新。

如何获取最新值,加 1 并更新 build.gradle,然后根据新版本代码和版本名称生成构建?

以下是对我不起作用的现有参考。 …

continuous-integration android continuous-delivery azure-devops azure-pipelines

6
推荐指数
2
解决办法
8032
查看次数

如何禁用作业的 GitLab 构建缓存

在 GitLab 中似乎有某种构建缓存。

例如,我有一份构建和标记 docker 镜像的工作。作业成功并且构建日志看起来正常,但图像实际上并未在运行程序中创建。文件也是如此:写入文件,作业完成后该文件不存在。我怀疑构建使用了某种缓存,因为它在这些场景中执行得如此之快。

这种行为似乎最常出现在分离管道、标记管道以及管道通常通过不同引用指向相同提交时。

如何禁用作业缓存并强制发生副作用?

continuous-integration caching build continuous-delivery gitlab

6
推荐指数
1
解决办法
1万
查看次数

当 MR 打开时仅运行一次 Gitlab CI 作业

我在 Gitlab 中有一个场景,当第一次在 Gitlab 中打开 MR 时,我想 ping 特定的 Slack 通道。我尝试rules在源为时触发merge_request_event,但不幸的是,当新提交推送到打开的 MR 时,这也会触发我的工作。

是否可以在 MR 最初打开时运行一次Gitlab CI 作业,并且在此之后不再运行,即使将新提交添加到 MR 中也是如此?

ping:
  stage: .pre
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
  script:
    - 'curl to slack url'
Run Code Online (Sandbox Code Playgroud)

continuous-integration continuous-delivery gitlab gitlab-ci gitlab-ci-runner

6
推荐指数
1
解决办法
2518
查看次数