我正在尝试配置Hudson,以便我能够自动将构建(.war文件)部署到Tomcat.然后,某人将使用新部署的构建来测试应用程序.
我已经尝试使用Deploy Plugin自动部署.war文件,这很有效.但是,构建.war文件的作业将在每次scm更改后运行(无论何时提交代码).使用Deploy Plugin,每次构建时都会将.war文件部署到Tomcat.由于代码经常被提交,这意味着Web应用程序也会频繁重启,这将中断测试过程.
我很欣赏Hudson运行我的单元测试并定期进行构建,因此我不想更改此工作的触发器.
我正在寻找一种方法,我可以手动决定从Hudson内部署.我尝试创建一个单独的作业,将从第一个作业部署.war,但这不起作用.有没有人有任何经验设置这样的东西?
我们的开发/发布周期如下:
接受的功能然后由测试人员合并到主分支中,因此将在下一个发布周期中释放(我们每周部署主干/主代码).
我们对合并冲突感到沮丧,因为当测试人员使用UAT的功能并发现它不会干净地合并时,在其中工作的开发人员通常会转向别的东西.
我们正在考虑一个解决方案,TeamCity会针对当前主分支自动合并每个功能分支,导致合并冲突的任何构建都被视为失败的构建 - 这将使我们能够及早了解有问题的合并,以便我们可以修复他们早点.
TeamCity似乎没有对此工作流的内置支持(即,当推送分支X,结帐主,将分支X合并到其上,构建,单元测试,创建包时).有没有人使用TeamCity和Github创建类似的工作流程 - 可能使用自定义的msbuild目标?
编辑:我应该澄清我们正在使用Github,但我们目前没有使用拉取请求 - 听起来这是我应该调查的事情.:)
git teamcity feature-branch continuous-deployment branching-and-merging
我计划在最后用Docker建立一个基于jenkins的CD工作流程.我的想法是为每个绿色构建自动构建(由Jenkins)一个docker镜像,然后通过jenkins或'hand'部署该图像(我还不确定是否要自动运行每个绿色构建).
达到建立新图像的目的很容易.我的问题是关于部署本身."重新加载"或"重启"正在运行的docker容器的最佳做法是什么?假设为容器更改了映像,如何在内部运行服务时优雅地重新加载它?我是否需要使用多个运行容器和负载平衡来进行传统舞蹈,或者是否有"停靠"方式?
我想在本地服务器和我正在部署的实时服务器之间使用bitbucket作为中间件.
我正在使用Windows Server 2012和iis 8.我正在开发一个ASP.NET MVC 5项目.
基本上,我想重新创建azure用于持续集成的相同工作流程:
在本地处理应用程序,然后将更改提交到bitbucket中的master(不一定)分支,然后服务器将与master分支同步以反映更改.
我假设起点是在本地服务器和实时服务器上都有bitbucket存储库的副本,但我正在努力将本地服务器和实时服务器链接到bitbucket.
我在我的构建定义中添加了名为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并使它的缓存无效?
我有各种Cucumber功能文件,每个文件都有多个场景.每个要素文件用于系统的不同组件.
我有各种运行器,每个组件一个,因此每个功能文件一个.
下面是我的一些项目结构,您可以在其中查看包含_Run_AllTest.java在Resources文件夹中包含我的功能的运行程序.
Test
????java
? ?
? ????stepdefs
? ? ????MOPStepDefs
? ? ? ADAWA_Run_AllTest.java
? ? ? DPL_Run_AllTest.java
? ? ? MOPStepDefs.java
? ? ? MOP_Run_AllTest.java
? ? ?
? ? ????MOSStepDefs
? ? ? MOSStepDefs.java
? ? ? MOS_Run_AllTest.java
? ? ? PAR_Run_AllTest.java
? ? ? RenewalApproachingPAR_Run_AllTest.java
? ? ?
? ? ????OAStepDefs
? ? ? OAStepDefs.java
? ? ? OA_Run_AllTest.java
? ? ?
? ? ????TPOSStepDefs
? ? TPOStepDefs.java
? ? TPOS_Run_AllTest.java
? ? …Run Code Online (Sandbox Code Playgroud) teamcity continuous-integration cucumber maven continuous-deployment
我将描述我的设置以使问题不那么抽象,但它们似乎并不特定于我的情况。
我们有 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
我在 React 中使用 Firebase,在初始化 Firebase 时,我使用从我的 .env 文件中提取的环境变量dotenv。我想构建我的 React 应用程序并将其部署到 Firebase 托管,我将 GitHub Actions 与以下 .yml 工作流文件一起使用:
name: Deploy
on:
push:
branches:
- master
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@master
- name: Install Dependencies
run: npm install
- name: Build
run: npm run build
- name: Archive Production Artifact
uses: actions/upload-artifact@master
with:
name: public
path: public
deploy:
name: Deploy
needs: build
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@master
- …Run Code Online (Sandbox Code Playgroud) environment-variables continuous-deployment firebase firebase-hosting github-actions