我正在考虑使用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存储库.然后,使用该新版本作为依赖项触发管道中的下游项目,并以类似方式构建.
我需要的是在构建项目之前更改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文件.
有没有办法阻止图像上传到docker hub与现有图像相同的标签?我们的用例如下.
我们使用docker-compose文件部署到生产环境,并将图像标记作为版本号.为了支持回滚到先前的环境和幂等部署,必须使某个标记的泊坞窗图像始终引用相同的图像.
但是,docker hub允许使用与现有图像相同的标签上载图像(它们覆盖旧图像).这完全打破了对图像进行版本控制的想法.
我们目前有一些解决方法,包括我们的构建脚本拉动图像的所有版本,并查看标签以检查覆盖不会发生等等,但感觉必须有更好的方法.
如果docker hub不支持这个,有没有办法在没有docker hub的情况下进行docker部署?
我在Visual Studio Team Services中有一个构建定义,其中包含以下步骤:
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
以这个基本的构建管道(带有 gradle 任务)为例:
根据 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 实现上述管道呢?
我们最近在 Google App Engine 上设置了一个 nodejs webapp 的持续集成/部署/交付。CI 服务器 (GitLabCI) 根据分支 (develop/master) 运行依赖项安装、构建、测试和部署到集成/生产。
在今天,我们面临的唯一错误是在依赖步骤期间,所以我们并没有太在意它。但是昨天(21/10/16)发生了大规模的 DNS 中断,并且管道在部署步骤中间失败,导致生产中断。只需重新运行管道即可完成工作,但问题随时可能重现。
我的问题是:
目前我们只有两个版本“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
我在 Windows Server 2016 上使用 9.2.0 Gitlab 的 CI 多运行器。在我通过 MSBUILD 发布 ASP.NET 项目的步骤中,我收到了ERROR_USER_UNAUTHORIZED来自 IIS的身份验证错误。但是当我CMD在构建机器上使用窗口时,我运行相同的发布命令 - 一切都已发布。我使用的SYSTEM是ADMINISTRATOR帐户还是帐户都没有关系。
在发布步骤中,我遇到了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) 我有一个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。:)
在我的项目中,我配置了 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
在将构建部署到 UAT、生产等多个环境时。我想用 config.json 替换一个文件 config.uat.json 或 config.prod.json。有没有可用的选择?就像我们有 XML 转换一样。
我知道 Json 变量替换,但这不符合我的目的,因为变量列表很长(近 50 个条目)
提前致谢!
azure continuous-delivery azure-devops azure-pipelines azure-pipelines-release-pipeline