标签: continuous-deployment

同时部署多个微服务的最佳实践有哪些?

如果发生影响多个服务的更改,我一直在努力寻找同时部署多个微服务的最佳方法。

虽然我对任何通用方法都感兴趣,但让我提供一个我遇到的具体示例。

我们公司使用AWS和Elastic Beanstalk为一个网站部署微服务容器,相对解耦。现在我们的网络应用程序包括:

  • 用 Angular 编写的 SPA,部署并托管在 S3 存储桶中(称为 SPA)

  • 一个 webapi 服务,用 .NET Core 编写,经过 Docker 化,并部署到弹性 beanstalk 应用程序(称为 WebAPI)

  • 一个集成服务,用 Node.JS 编写,经过 Docker 化,并部署到弹性 beanstalk 应用程序(称为 IntService)

SPA 和 WebAPI 通过 REST API 进行对话

WebAPI 和 IntService 是松散耦合的,并通过 AWS SQS 队列相互通信。

如果我们对其中任何一项服务进行更改,我们的部署过程都相当简单。例如,如果我们对 WebAPI 进行了更改,我们会启动一个新的 Elastic beanstalk 应用程序环境,部署在那里,然后交换 URL(基本的蓝绿部署)。

但是,如果发生影响多个服务的更改,我将很难找到正确的方法。例如,假设有一项功能需要同时更改 WebAPI 和 IntService。由于它们都位于自己的存储库中,因此它们都有自己的 CI 和 CD 管道,彼此独立。

如果只部署一项服务,整个应用程序可能会崩溃。人们如何处理这种类型的部署?您是否克隆 WebAPI 和 IntService 环境,部署这两个环境,然后交换两个 URL,只是确保几乎同时执行此操作,以最大限度地缩短只有一项服务处于活动状态的时间窗口?

或者,我们正在考虑使用 API 网关。但这是否意味着每次我们想要部署时,我们都会创建一个新的 API 网关阶段?如果我们这样做,蓝绿部署“交换”实际上是否发生在 API 网关中?

抱歉,如果这令人困惑,但我只是想了解一下我所想象的微服务的一个相当常见的问题。

amazon-web-services continuous-deployment amazon-elastic-beanstalk microservices

0
推荐指数
1
解决办法
1598
查看次数

Travis CI:如何有条件地运行提供程序部署作业?

我有一个基于 2 个条件部署到不同 S3 存储桶的 travis 脚本:1. 分支名称 2. $TRAVIS_BRANCHenv 变量

... travis stuff
deploy:
  - provider: s3
    ... other config
    bucket: my-staging-bucket
    on:
      repo: MyOrg/my-repo
      branch: staging
      condition: $TRAVIS_BRANCH = staging
  - provider: s3
    ... other config
    bucket: my-prod-bucket
    on:
      repo: MyOrg/my-repo
      branch: production
      condition: $TRAVIS_BRANCH = production
Run Code Online (Sandbox Code Playgroud)

它按预期工作:当我部署到暂存时,第一个配置成功构建和部署,我在 Travis 的作业日志中收到了适当的消息。

它还尝试部署到生产环境并被on:条件停止,再次提供表明同样多的消息。生成的日志消息如下所示,前两行表示成功部署到登台,没有部署到生产。

-Preparing deploy
-Deploying application
-Skipping a deployment with the s3 provider because a custom condition was not met
Run Code Online (Sandbox Code Playgroud)

当情况逆转时,这是一致的:

-Skipping a deployment with the …
Run Code Online (Sandbox Code Playgroud)

deployment continuous-deployment travis-ci

0
推荐指数
1
解决办法
1703
查看次数

如何在 Jenkins 上生成 Gradlew?

如何为 Jenkins Android 项目生成 gradlew 文件?我的项目不是 Android Native。我的项目是 Flutter。

我尝试使用 Jenkins 创建 CD,但出现了一些错误。

这是我的管道代码 (JenkinsFile)

stage('Build Release APK') {
    sh "ls ./android"
    sh "./android/gradlew clean assembleRelease"
}
Run Code Online (Sandbox Code Playgroud)

ls 输出是,(没有gradlew文件)

ls ./android
app
build.gradle
gradle
gradle.properties
key.properties
settings.gradle
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误

./android/gradlew clean assembleRelease
/Users/donperera/.jenkins/workspace/demo@tmp/durable-b0592b49/script.sh: line 1: ./android/gradlew: No such file or directory
Run Code Online (Sandbox Code Playgroud)

有没有办法用Jenkins构建apk/aap?

可以使用这个插件吗?但我已经添加了这个。但不是在我的脚本中。https://guides.gradle.org/executing-gradle-builds-on-jenkins/

gradle continuous-deployment jenkins gradlew flutter

0
推荐指数
1
解决办法
1139
查看次数

-1
推荐指数
1
解决办法
4524
查看次数