标签: continuous-deployment

Docker持续部署工作流程

我计划在最后用Docker建立一个基于jenkins的CD工作流程.我的想法是为每个绿色构建自动构建(由Jenkins)一个docker镜像,然后通过jenkins或'hand'部署该图像(我还不确定是否要自动运行每个绿色构建).

达到建立新图像的目的很容易.我的问题是关于部署本身."重新加载"或"重启"正在运行的docker容器的最佳做法是什么?假设为容器更改了映像,如何在内部运行服务时优雅地重新加载它?我是否需要使用多个运行容器和负载平衡来进行传统舞蹈,或者是否有"停靠"方式?

linux continuous-integration continuous-deployment docker

8
推荐指数
1
解决办法
1990
查看次数

将秘密变量从TFS Build传递给Powershell脚本

我在我的构建定义中添加了名为Password的秘密变量,如下图所示:

TFS构建变量

我想在我的一个构建步骤中将密码传递给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脚本.因此,唯一的选择是将密码作为输入传递给脚本.

powershell tfsbuild continuous-deployment

8
推荐指数
1
解决办法
3241
查看次数

我们何时应该使用参数何时在ARM模板中使用变量

我很困惑在哪里使用变量以及在ARM模板中使用参数的位置.我们如何打这个电话?

引用的脚本使用两者.我更好奇使用变量的理由.

在此输入图像描述

参考

示例服务Fabric Azure部署脚本

https://raw.githubusercontent.com/azure/azure-quickstart-templates/master/service-fabric-oms/azuredeploy.json

azure continuous-deployment azure-resource-manager azure-resource-group azure-template

8
推荐指数
2
解决办法
3645
查看次数

如何以编程方式使Bitbucket Pipeline的缓存无效?

我的Bibucket管道中有一个node_modules缓存,并添加了新模块(例如yarn add react-modal)-如何使Bitbucket管道检测到新的yarn.lock并使它的缓存无效?

caching bitbucket continuous-deployment bitbucket-pipelines

8
推荐指数
1
解决办法
764
查看次数

在 CI/CD 中如何管理前端和后端之间的依赖关系?

我将描述我的设置以使问题不那么抽象,但它们似乎并不特定于我的情况。

语境

我们有 Python-Django 后端和 VueJS 前端,每个都在一个存储库中,使用 Portainer(使用堆栈)配置和部署 Gitlab-CI。每个存储库的生产分支中的提交遵循以下路径:

  1. 犯罪
  2. gitlab-ci 管道:
    1. 构建 docker 镜像
    2. 测试图像(前端针对部署的后端进行测试)
    3. 将图像标记为生产:最新
    4. 将图像推回 gitlab 注册表
    5. webhook portainer中对应的service(frontend/backend)来更新部署的镜像
  3. 搬运工:
    1. 拉图
    2. 部署

问题

部署同步

想象一下,我们在前端和后端都进行了重大更改,并且两者都将与以前的版本不兼容。因此必须同时部署新版本。

在我们当前的设置中,我们必须首先部署后端(什么会破坏已部署的前端),然后部署新的前端,修复生产,但有一个“停机”期。

测试的分支依赖

有时,当我们在前端开发分支 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

8
推荐指数
1
解决办法
4102
查看次数

App Store Connect API 最后上传的构建版本和编号

我正在设置 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

8
推荐指数
2
解决办法
3670
查看次数

CircleCI 部署看起来成功,但退出时代码为 1?

我有一个 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)

amazon-s3 continuous-deployment circleci storybook

8
推荐指数
0
解决办法
2386
查看次数

构建在本地工作但在 Codemagic 上失败 | 任务“:app:stripDebugDebugSymbols”执行失败

我正在尝试实现一个持续部署系统来构建我的应用程序并使用 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)

continuous-deployment flutter codemagic cicd

8
推荐指数
1
解决办法
1579
查看次数

如何将工件从子作业返回到父管道?

使用触发器动态选择测试作业

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)

continuous-deployment continuous-delivery gitlab-ci cicd

8
推荐指数
1
解决办法
1246
查看次数

GitOps 中单独存储库中的应用程序和环境配置 - 如何处理配置更改?

我已经开始使用 k8s 和 argoCD 进行 GitOps 之旅,使用应用程序源和部署文件(清单、环境配置等)的单独存储库,并且我试图弄清楚,如果应用程序源代码更改还需要更改环境配置。

示例:应用程序已部署并在测试/QA 环境中运行,我想推送代码更改,这需要新的“DB_ConnectionString”环境变量。由于此环境变量是新的,因此它不存在于我的部署/gitops 存储库的配置文件中(假设它是 Helm value-QA.yml)。

如果我推送这个新的代码更改,CI 将构建应用程序并更新容器,这会提示 argoCD 部署新的容器版本 - 但因为我还没有更新 GitOps 存储库,所以它缺少这个新变量,并且部署将失败。

我想我很难理解,如果在这些情况下,我被迫始终确保我的 GitOps 存储库在我的应用程序存储库之前更新,以及是否有最佳实践来处理此流程?

continuous-deployment gitops argocd

8
推荐指数
1
解决办法
789
查看次数