标签: continuous-delivery

是否可以将maven-release-plugin与特定版本一起使用?

我正在考虑使用SVN,Jenkins和Maven的部署管道.目前我被困在我通常会打电话mvn release:perform给工作副本的那一刻.

在考虑部署管道时,我想创建一个管道,其中每个提交都可用于释放软件以进行测试/生产.假设我有5个版本,我决定将版本3(带有修订版3)发布到生产中.已经有2个新的提交到trunk(现在是修订版5).

是否可以maven-release-plugin在版本3中使用checkout/build/tag/commit版本?当maven-release-plugin完成释放时,它通常会将修改后的POM提交到trunk.

我对这里的任何信息或建议感到高兴,所以请随时给我指点书籍(如http://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912),博客文章,Jenkins文档......也许我完全走错了路.

maven continuous-delivery

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

物理上更改Maven pom.xml <properties>值

我正在为几个相互依赖的项目构建一个部署管道.每个构建都会生成一个具有唯一版本号的新版本,该版本号部署到Maven存储库.然后,使用该新版本作为依赖项触发管道中的下游项目,并以类似方式构建.

我需要的是在构建项目之前更改pom.xml(或多模块项目中的所有poms)中的属性值.例如,在下面的代码中,"0.1.200"将更改为"0.1.345"(或者无论最新的内部版本号是什么).使用系统属性不是一种选择,因为更新的pom将部署在Maven存储库中,因此更改必须是持久的.

<properties>
    <foo.version>0.1.200</foo.version>
</properties>

<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>foo</artifactId>
        <version>${foo.version}</version>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

是否有一些Maven插件使用一个命令行指令执行此操作?否则我需要编写一个简短的脚本(例如在Ruby中),它解析并更改项目中的所有pom.xml文件.

maven build-pipeline continuous-delivery

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

如何防止docker hub上的docker镜像被覆盖?

有没有办法阻止图像上传到docker hub与现有图像相同的标签?我们的用例如下.

我们使用docker-compose文件部署到生产环境,并将图像标记作为版本号.为了支持回滚到先前的环境和幂等部署,必须使某个标记的泊坞窗图像始终引用相同的图像.

但是,docker hub允许使用与现有图像相同的标签上载图像(它们覆盖旧图像).这完全打破了对图像进行版本控制的想法.

我们目前有一些解决方法,包括我们的构建脚本拉动图像的所有版本,并查看标签以检查覆盖不会发生等等,但感觉必须有更好的方法.

如果docker hub不支持这个,有没有办法在没有docker hub的情况下进行docker部署?

continuous-delivery docker dockerhub

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

Visual Studio Team Services中的空构建工件

我在Visual Studio Team Services中有一个构建定义,其中包含以下步骤:

  • PowerShell(prebuild.ps1 powershell脚本,用于设置DNX
  • NuGet安装程序
  • Visual Studio Build
  • 复制和发布构建工件

Visual Studio Build步骤中的MSBuild参数如下:

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true 
/p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.stagingDirectory)"
Run Code Online (Sandbox Code Playgroud)

复制和发布构建工件中的复制根设置为$(build.stagingDirectory),其内容设置为***.*并且工件名称设置为删除.

构建成功,但是当我查看Artifacts时,它只是一个空的drop.zip.

它说,查看Publish Artifacts步骤的日志

2016-04-28T07:37:41.7047278Z Executing the powershell script: C:\LR\MMS\Services\Mms\TaskAgentProvisioner\Tools\agents\1.98.1\tasks\CopyPublishBuildArtifacts\1.0.22\CopyPublishBuildArtifacts.ps1
2016-04-28T07:37:41.8467280Z Preparing artifact content in staging folder C:\a\1\a...
2016-04-28T07:37:41.9187272Z Total files copied: 0.
2016-04-28T07:37:42.3778918Z Max Concurrent Uploads 2, Max Creators 1
2016-04-28T07:37:42.4218914Z Found 0 files to upload.
2016-04-28T07:37:42.4268927Z Created 0 files without uploading content. Total files processed 0
2016-04-28T07:37:42.4288961Z Uploaded artifact 'C:\a\1\a\drop' to container folder 'drop' of build 38.
2016-04-28T07:37:42.6274164Z Associated …
Run Code Online (Sandbox Code Playgroud)

msbuild continuous-integration continuous-deployment continuous-delivery azure-devops

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

Jenkins 使用增量 Gradle 构建构建管道

以这个基本的构建管道(带有 gradle 任务)为例:

  1. 编译/运行单元测试(gradle clean build)
  2. 集成测试(gradle integrationTest)
  3. 验收测试(gradleacceptanceTest)
  4. 部署(gradle myCustomDeployTask)

根据 Jez Humble 的“Continuous Delivery”一书,您应该只构建一次二进制文件。所以在上面的理论管道中,在第 1 步中我们清理、编译和构建 WAR,在第 2 步中我们运行集成测试(使用第 1 步中编译的代码),在第 3 步中我们运行验收测试(使用编译后的代码)步骤 1 中的代码),并在步骤 4 中部署 WAR(在步骤 1 中构建)。到现在为止还挺好。

我正在尝试在 Jenkins 中实现这个管道。因为每个作业都有自己的工作区,所以第 2、3 和 4 步最终会重新编译代码并构建 WAR,这违反了只构建一次二进制文件的“持续交付”准则。

为了解决这个问题,我使用了“克隆工作区 SCM ”Jenkins 插件,它将从第一个构建中压缩工作区,并成为构建 2、3 和 4 的工作区源。但是,gradle 仍然重新编译每个构建中的代码步骤,因为它显然使用文件的绝对路径来确定是否需要执行任务。由于插件将文件移动到了新的工作空间,因此绝对路径发生了变化,这让 gradle 认为它需要从头开始而不是执行增量构建。

现在我们可以在 Jenkins 中共享工作区,但由于可能有两个作业针对共享工作区运行,因此这也令人不悦。

那么如何在坚持持续交付、Jenkins 和 Gradle 的最佳实践的同时,使用 Jenkins 和 Gradle 实现上述管道呢?

gradle jenkins build-pipeline continuous-delivery

5
推荐指数
1
解决办法
3416
查看次数

在 Google App Engine 上持续集成/部署/交付,风险太大?

我们最近在 Google App Engine 上设置了一个 nodejs webapp 的持续集成/部署/交付。CI 服务器 (GitLabCI) 根据分支 (develop/master) 运行依赖项安装、构建、测试和部署到集成/生产。

在今天,我们面临的唯一错误是在依赖步骤期间,所以我们并没有太在意它。但是昨天(21/10/16)发生了大规模的 DNS 中断,并且管道在部署步骤中间失败,导致生产中断。只需重新运行管道即可完成工作,但问题随时可能重现。

我的问题是:

  • 在持续部署过程中,我们如何处理此类网络问题?
  • 在 Google App Engine 上持续部署真的是个好主意吗?
  • 如果是这样,App Engine 部署方法是什么?我没有找到任何相关的文档...

目前我们只有两个版本“dev”和“prod”在提交后更新,但在随机时间我可以观察到奇怪的行为。

非常欢迎任何回应/建议/反馈!

关于我正在谈论的网络问题的堆栈跟踪示例:

DEBUG: Error sending result: 'MetadataServerException(HTTPError(),)'. Reason: 'PicklingError("Can't pickle <type 'cStringIO.StringO'>: attribute lookup cStringIO.StringO failed",)'
Traceback (most recent call last):
  File "/google-cloud-sdk/lib/googlecloudsdk/calliope/cli.py", line 733, in Execute
    resources = args.calliope_command.Run(cli=self, args=args)
  File "/google-cloud-sdk/lib/googlecloudsdk/calliope/backend.py", line 1630, in Run
    resources = command_instance.Run(args)
  File "/google-cloud-sdk/lib/surface/app/deploy.py", line 53, in Run
    return deploy_util.RunDeploy(self, args)
  File "/google-cloud-sdk/lib/googlecloudsdk/command_lib/app/deploy_util.py", …
Run Code Online (Sandbox Code Playgroud)

google-app-engine continuous-integration continuous-deployment continuous-delivery gitlab-ci

5
推荐指数
1
解决办法
1608
查看次数

MSBUILD 发布 ERROR_USER_UNAUTHORIZED

概括

我在 Windows Server 2016 上使用 9.2.0 Gitlab 的 CI 多运行器。在我通过 MSBUILD 发布 ASP.NET 项目的步骤中,我收到了ERROR_USER_UNAUTHORIZED来自 IIS的身份验证错误。但是当我CMD在构建机器上使用窗口时,我运行相同的发布命令 - 一切都已发布。我使用的SYSTEMADMINISTRATOR帐户还是帐户都没有关系。

重现步骤

  1. 设置 IIS 发布。
  2. 设置 Gitlab 的构建代理。
  3. 创建 Gitlab 的 YAML 构建脚本(见下文)。
  4. 运行构建。

实际行为

在发布步骤中,我遇到了ERROR_USER_UNAUTHORIZED错误。

预期行为

在发布步骤中,我已将 ASP.NET 发布到服务器。

相关日志和/或屏幕截图

  C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\Web\Microsoft.Web.Publishing.targets(4292,5): msdeploy error ERROR_USER_UNAUTHORIZED: ?? ??????? ????????? ?????? Web Deploy. (????????? ??????????? ? ?????????? ?????????? ("192.168.1.66") ? ?????????????? ?????? ???-??????????, ?? ?? ??????? ????????????. ?????????, ??? ?? ??????????? …
Run Code Online (Sandbox Code Playgroud)

msbuild publish continuous-delivery gitlab gitlab-ci

5
推荐指数
1
解决办法
1241
查看次数

在部署期间/之后获取Maven部署URL

我有一个Java项目。它设置了pom.xml,mvn deploy用于将新工件部署到内部公司Nexus。而且一切正常。

但是...我正在将该应用程序集成到CI / CD系统中。因此,基本上,我需要以编程方式/自动地知道此工件的部署位置(工件的确切Nexus URL),因此我可以将其作为CI / CD系统下一步的输入。

我知道使用Maven时通常不需要这样做。但是我能说什么,我需要这个URL出现在显示此工件的网页上,以及与此相关的其他信息,例如在其上运行了哪些测试,谁创建了它,何时创建,何时提交。它建立在哪个存储库中...

所以...除了手动解析pom.xml文件以尝试重新创建URL的黑手党方式之外,我是否有一种很好的方法来获取此信息。有点像mvn give-me-the-url-to-which-you-would-deploy-if-i-were-to-run-deploy。:)

java continuous-integration maven continuous-delivery

5
推荐指数
1
解决办法
549
查看次数

如何为多部署配置只执行一次 Travis CI 'before_deploy' 步骤?

在我的项目中,我配置了 Travis CI 构建过程,该过程将新版本的工件发布到 Github 版本。我的.travis.yml文件:

language: java
jdk: oraclejdk8

branches:
  only:
    - master

before_install: mvn package

before_deploy:
  - export TRAVIS_TAG="1.$TRAVIS_BUILD_NUMBER"
  - echo "$TRAVIS_TAG" "$TRAVIS_COMMIT"
  - git config --local user.name "$USER_NAME"
  - git config --local user.email "$USER_EMAIL"
  - git tag "$TRAVIS_TAG" "$TRAVIS_COMMIT"
  
deploy:
  provider: releases
  tag_name: $TRAVIS_TAG
  target_commitish: $TRAVIS_COMMIT
  name: $TRAVIS_TAG
  overwrite: true
  skip_cleanup: true
  api_key: $GITHUB_TOKEN
  file_glob: true
  file:
    - target/my-artifact-$TRAVIS_TAG.jar
  on:
    branch: master

notifications:
  email:
    on_success: never
    on_failure: always
Run Code Online (Sandbox Code Playgroud)

我想添加将工件部署到 Heroku 的能力,为此我添加了第二个项目deploy,这个:

provider: heroku …
Run Code Online (Sandbox Code Playgroud)

continuous-integration github continuous-deployment continuous-delivery travis-ci

5
推荐指数
1
解决办法
2753
查看次数

如何在 VSTS CD 中的 release 中替换 json 文件?

在将构建部署到 UAT、生产等多个环境时。我想用 config.json 替换一个文件 config.uat.json 或 config.prod.json。有没有可用的选择?就像我们有 XML 转换一样。

我知道 Json 变量替换,但这不符合我的目的,因为变量列表很长(近 50 个条目)

提前致谢!

azure continuous-delivery azure-devops azure-pipelines azure-pipelines-release-pipeline

5
推荐指数
1
解决办法
1091
查看次数