我计划在最后用Docker建立一个基于jenkins的CD工作流程.我的想法是为每个绿色构建自动构建(由Jenkins)一个docker镜像,然后通过jenkins或'hand'部署该图像(我还不确定是否要自动运行每个绿色构建).
达到建立新图像的目的很容易.我的问题是关于部署本身."重新加载"或"重启"正在运行的docker容器的最佳做法是什么?假设为容器更改了映像,如何在内部运行服务时优雅地重新加载它?我是否需要使用多个运行容器和负载平衡来进行传统舞蹈,或者是否有"停靠"方式?
我在我的构建定义中添加了名为Password的秘密变量,如下图所示:

我想在我的一个构建步骤中将密码传递给PowerShell脚本,如下图所示:

我的PowerShell脚本如下所示
Param
(
[Parameter(Mandatory=$true)]
[string]$UserName,
[Parameter(Mandatory=$true)]
[string]$Password
)
$appPool = New-WebAppPool -Name "test"
$appPool.processModel.userName = $userName
$appPool.processModel.password = $password
$appPool.processModel.identityType = "SpecificUser"
$appPool | Set-Item
Run Code Online (Sandbox Code Playgroud)
但看起来密码的类型不是字符串.我尝试PSCredential但没有奏效.有人能帮助我吗?如何将密码从构建步骤传递给PowerShell脚本以及安全变量的类型?我无法直接读取环境变量,因为我在目标计算机上运行PowerShell脚本.因此,唯一的选择是将密码作为输入传递给脚本.
我很困惑在哪里使用变量以及在ARM模板中使用参数的位置.我们如何打这个电话?
引用的脚本使用两者.我更好奇使用变量的理由.
参考
示例服务Fabric Azure部署脚本
azure continuous-deployment azure-resource-manager azure-resource-group azure-template
我的Bibucket管道中有一个node_modules缓存,并添加了新模块(例如yarn add react-modal)-如何使Bitbucket管道检测到新的yarn.lock并使它的缓存无效?
我将描述我的设置以使问题不那么抽象,但它们似乎并不特定于我的情况。
我们有 Python-Django 后端和 VueJS 前端,每个都在一个存储库中,使用 Portainer(使用堆栈)配置和部署 Gitlab-CI。每个存储库的生产分支中的提交遵循以下路径:
想象一下,我们在前端和后端都进行了重大更改,并且两者都将与以前的版本不兼容。因此必须同时部署新版本。
在我们当前的设置中,我们必须首先部署后端(什么会破坏已部署的前端),然后部署新的前端,修复生产,但有一个“停机”期。
有时,当我们在前端开发分支 feature-1 时,必须针对后端的分支 feature-1 对其进行测试。
在我们当前的设置中,前端中的所有提交都针对部署的后端进行了测试(为了避免在 CI 中复制后端,仅使用生产 API 地址),在这种情况下会导致错误的测试结果。
当提交到后端时,它可能会破坏前端。
目前后端没有针对前端进行测试(只有另一种方式)。
对于部署同步问题,我考虑创建另一个存储库,该存储库只有一个文件,指定应部署的前端和后端的版本。此存储库中的提交将导致 Portanier 的两个服务 webhooks 被“卷曲”以进行更新(后端和前端)。这并不能保证同步更新(在 Portainer 中可能会失败并且不会有回滚),但它会比当前设置更好。
我不确定这里应该用什么来指定版本:commit hash、git tag、branch、docker image version...最后一个可能避免了重建和测试图像,但我认为图像名称和版本是固定的Portainer 的堆栈定义,并且不容易自动更新。
对于分支依赖性测试,我考虑在每个存储库(前端和后端)中都有一个文件,指定要测试的后端/前端的哪个分支。但是每个存储库的 CI 必须复制整个部署环境(例如,运行一个新的后端和前端来测试每个前端提交)。这也将允许后端集成测试。由于我们使用的是 Docker,这并不是很复杂,但是每个 CI 管道都会花费额外的时间......此外,当第一个存储库(前端或后端)提交时,它会引用另一个中仍然不存在的分支存储库,并失败...
这些解决方案对我来说似乎很尴尬,特别是如果这些是 Docker 的 CI/CD 常见问题。当我们向组合中添加更多存储库时,它会变得更加丑陋。
备择方案?
感谢关注!
(编辑:出于好奇,我当前的设置基于本文)
continuous-integration continuous-deployment docker gitlab-ci portainer
我正在设置 CI/CD 应用程序部署以将构建上传到 TestFlight/AppStore,因此需要在构建之前检查之前从 App Store Connect 上传的构建的版本
我已经生成了使用 App Store Connect API 进行身份验证所需的 JWT 令牌,并从以下位置获取了应用程序 ID: https: //api.appstoreconnect.apple.com/v1/apps
现在我使用以下方式请求与该应用程序 ID 相关的构建:https://api.appstoreconnect.apple.com/v1/apps/ {id}/builds
这给了我这个响应(响应数据是分页的(偏移/限制)并且不按上传的构建版本排序):-
{
"data": [
{
"type": "preReleaseVersions",
"id": "<resource id>",
"attributes": {
"version": "1.3",
"platform": "IOS"
},
<some additional trees>
},
{
"type": "preReleaseVersions",
"id": "<resource id>",
"attributes": {
"version": "1.4",
"platform": "IOS"
},
<some additional trees>
},
{
"type": "preReleaseVersions",
"id": "<resource id>",
"attributes": {
"version": "1.2",
"platform": "IOS"
},
<some additional trees>
},
<some …Run Code Online (Sandbox Code Playgroud) continuous-integration continuous-deployment ios app-store-connect
我有一个 Circleci 配置,它运行一个脚本来部署故事书网站。它本质上是cd进入我的前端 monorepo 包,运行yarn install,构建故事书并将其同步到 S3 存储桶。
(编辑一些内容,例如包和文件的名称)
它在我的圈子配置文件中启动了一个 with 作业:
deploy-package-storybook:
<<: *defaults
working_directory: ~/root
steps:
- checkout
- <<: *install_aws
- attach_workspace:
at: ~/
- run:
name: Deploy Storybook
command: |
~/root/bin/deploy-storybook.sh PACKAGE
Run Code Online (Sandbox Code Playgroud)
该脚本如下所示:
echo "${CYAN}deploying storybook\n"
cd packages/${TAG}
yarn build-storybook
aws s3 sync ./artifacts/storybook s3://storybook.website.us/${TAG} --delete || slack_alert storybook-deploy-fail
slack_alert "deploy-storybook-success"
Run Code Online (Sandbox Code Playgroud)
当它在 Circle 中运行时,它似乎完成了同步,甚至向我的频道发送了一条已成功部署的松弛警报,但在最后,它显示了以下内容:
upload: artifacts/storybook/vendors~main.8c562e1c344f6a5f2073.bundle.js to s3://storybook.website.us/package/vendors~main.8c562e1c344f6a5f2073.bundle.js
0
ok
Exited with code exit status 1
CircleCI received exit code …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个持续部署系统来构建我的应用程序并使用 codemagic 部署到 Google Play。在本地进行构建工作正常,但在 Codemagic 上远程构建失败。
错误总结:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:stripDebugDebugSymbols'.
> 1 exception was raised by workers:
org.gradle.process.internal.ExecException: A problem occurred starting process 'command '/usr/local/share/android-sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-strip''
Run Code Online (Sandbox Code Playgroud)
完整日志:
== Building for Android ==
> flutter build appbundle --debug
Running "flutter pub get" in My_Project... 1,655ms
Building with sound null safety
Running Gradle task 'bundleDebug'...
[flutter_background_geolocation] Purging debug resources in release build
Note: Some input files use or override a …Run Code Online (Sandbox Code Playgroud) 使用触发器动态选择测试作业
prepare_test:
image: $CI_REGISTRY/platform/docker-images/vault:1.8
variables:
CONTEXT_TEST: |
include:
# PRODUCT
- project: 'gitlabci/integration-test'
ref: dev_v2
file:
- 'spark/.base_integration_test.yml'
- 'spark/.base_integration_test_with_kafka.yml'
integration_test:
variables:
COVERAGE_SOURCE: "./src"
INTEGRATION_TEST: |
$CONTEXT_TEST
extends: .base_integration_test
INTEGRATION_TEST_WITH_KAFKA: |
$CONTEXT_TEST
extends: .base_integration_test_with_kafka
stage: prepare_test
script:
- export CICD_KAFKA_HOST=$(cat test/fixtures.py | grep KAFKA_HOST)
- >
if [ "$CICD_KAFKA_HOST" != "" ]; then
export CICD_KAFKA_HOST="true"
echo "$INTEGRATION_TEST_WITH_KAFKA" >> test.yml
else
export CICD_KAFKA_HOST="false"
echo "$INTEGRATION_TEST" >> test.yml
fi
- env | sort -f
artifacts:
paths:
- test.yml
expire_in: 6000 seconds
# …Run Code Online (Sandbox Code Playgroud) 我已经开始使用 k8s 和 argoCD 进行 GitOps 之旅,使用应用程序源和部署文件(清单、环境配置等)的单独存储库,并且我试图弄清楚,如果应用程序源代码更改还需要更改环境配置。
示例:应用程序已部署并在测试/QA 环境中运行,我想推送代码更改,这需要新的“DB_ConnectionString”环境变量。由于此环境变量是新的,因此它不存在于我的部署/gitops 存储库的配置文件中(假设它是 Helm value-QA.yml)。
如果我推送这个新的代码更改,CI 将构建应用程序并更新容器,这会提示 argoCD 部署新的容器版本 - 但因为我还没有更新 GitOps 存储库,所以它缺少这个新变量,并且部署将失败。
我想我很难理解,如果在这些情况下,我被迫始终确保我的 GitOps 存储库在我的应用程序存储库之前更新,以及是否有最佳实践来处理此流程?