如果发生影响多个服务的更改,我一直在努力寻找同时部署多个微服务的最佳方法。
虽然我对任何通用方法都感兴趣,但让我提供一个我遇到的具体示例。
我们公司使用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
我有一个基于 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) 如何为 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/
如何启动Spinnaker的本地版本?这已经在这里得到了详细的回答和解决.