Articles of 持续集成

RPM升级的持续集成testing

我们在基于RPM的linux上发布软件。 我们收到来自不同团队的许多软件包,一些在我们的业务部门之外,必须正确升级(将来我们要检查依赖关系是否正确)。 最近我们被从我们业务部门以外提供的软件包升级中的一个错误所困扰。 现在是开始尝试自动testing这类事情的时候了。 我想到的事情是假设安装是好的(这通常会在functiontesting时间被捕获),然后检查使用前/后脚本进行的升级是否以与安装相同的方式修改文件。 如果不是,则标志为审查。 具体而言,我们要检查升级,内核升级等angular落案例,在chroot中运行的内核可能甚至不可用的chroot安装等。 我的问题是,做这种事情的软件是否已经存在? 我的search没有太多的运气。 当然,这个自动化的过程也会被包装指南所支持,但是由于我们的一些RPMs来自于我们的组织之外,所以我们仍然希望这个备份在将来给予我们保证。

build立和部署网站作为.deb包的最佳方式

我一直在努力将(主要是PHP)网站部署为.deb文件一段时间,并想知道是否有比我相当复杂的方法更好的方法。 我的目标是在我的登台服务器上进行持续集成,并通过一键式部署到Jenkins内的现场服务器。 我的用例现在: 在OSX上开发代码 Git中的版本控制 源包含debian /文件夹与控制,postinst和prerm脚本 Phing构build脚本在fakeroot环境中本地运行 将文件复制到镜像文件系统布局的/ tmp build文件夹中 将文件所有权设置为root / www-data 运行dpkg-deb –build $ {build.dir} $ {working.dir} 将包复制到我局域网上的专用deb库 我试图build立一个Jenkins CI服务器来观察Git仓库提交并自动执行构build。 问题在于Jenkins以自己的用户身份运行,他们没有像上面那样设置文件权限的权限。 我也看不到一个明显的方法来在Jenkins内部的fakeroot环境中运行Phing版本。 我的问题是: 有没有更好的方法来设置正确的文件所有权和权限,而不是将所有内容复制到一个临时目录,并有一个Phing步chmod的一切? dpkg-deb命令是否真的需要事先在文件系统上设置的所有文件权限? 有没有什么东西,我可以放在debian /文件夹,将安装.deb时设置这些权限? 我怎样才能让jenkins运行一个有正确的权限来设置文件所有权的构build脚本? 我可能误解了.debs的工作方式,但是看起来相当不方便的是,本地文件系统源代码的文件所有权必须镜像到目的地! 我接受任何其他构build和CI系统上人们用来执行类似任务的build议。

MSBuild无法构build寻找旧版本的Microsoft.Data.Tools.Schema.Sql

在安装和configuration2012版本的构build服务器之后,我试图做一个azure色的连续部署。 我已经安装了TFS2012。 构build控制器和服务器上的单个代理。 连接到云TFS2012。 在这种情况下,我也使用Azure网站。 我在生成服务器上安装了Visual Studio 2012 Professional和SQL Server 2012。 该项目没有数据库,所以我不确定它为什么要寻找10.3。 我没有看到该版本的服务器,但我看到11.0.2861.0。 有一些configuration,我需要改变它看看新版本? 我还在构build服务器上安装了2012年6月的SSDT。 编译是成功的,它实际上移动所有文件并创build一个包。 但是我得到这个错误,使生成事件失败。 我错过了什么? 我收到以下错误信息: Exception Message: The type initializer for 'Microsoft.Web.Deployment.DeploymentManager' threw an exception. (type TypeInitializationException) Exception Stack Trace: Server stack trace: at Microsoft.Web.Deployment.DeploymentProviderSettingCollection..ctor(String factoryName) at Microsoft.Web.Deployment.DeploymentProviderOptions..ctor(String factoryName) at Microsoft.Web.Deployment.DeploymentProviderOptions..ctor(DeploymentWellKnownProvider wellKnownProvider) at Microsoft.TeamFoundation.Deployment.Workflow.Activities.MSDeployWorker.RunCommand(String publishEndpoint, String targetSite, String userName, String password, […]

在哈德逊执行build立任务与根privilic

我有一个执行apt-get的构build脚本,因此需要root权限。 在哈德森运行这个脚本的最好方法是什么? 目前唯一的解决scheme,我发现的作品是添加一个条目的sudoers文件为用户哈德森像这样: hudson ALL=(ALL) NOPASSWD:ALL 但是,尽pipe我的构build脚本现在在Hudson中运行时没有错误,但我对这个解决scheme并不完全熟悉。 有没有更好的办法?

无法访问Jenkins服务器

我试图在我的web服务器上安装Jenkins ,这是在Amazon EC2实例上运行的Ubuntu 13.10服务器。 我已经重新启动Jenkins使用 sudo /etc/init.d/jenkins restart 当我检查我的过程 ps aux | grep jenkins 我可以看到多个项目正在运行,具有以下说明: jenkins 22356 0.0 0.0 20268 400 ? S 10:10 0:00 /usr/bin/daemon –name=jenkins –inherit –env=JENKINS_HOME=/var/lib/jenkins –output=/var/log/jenkins/jenkins.log –pidfile=/var/run/jenkins/jenkins.pid — /usr/bin/java -jar /usr/share/jenkins/jenkins.war –webroot=/var/run/jenkins/war –httpPort=8080 –ajp13Port=-1 –httpListenAddress=127.0.0.1 –ajp13ListenAddress=127.0.0.1 –preferredClassLoader=java.net.URLClassLoader jenkins 22358 5.9 5.7 1618372 97376 ? Sl 10:10 0:17 /usr/bin/java -jar /usr/share/jenkins/jenkins.war –webroot=/var/run/jenkins/war […]

Tomcat并行部署,自动取消部署旧应用程序

我一直在使用Tomcat 8的并行部署作为零停机时间连续部署设置的一部分。 当运行testing项目时,CI服务器会自动将.war文件重命名为应用程序## {version-number} .war并将其复制到/ webapp文件夹。 应用程序## 333将与应用程序## 332很好地共存。 我唯一遇到的问题是,一旦所有stream量(新会话)自动转换到新stream量,我必须手动取消部署旧应用程序。 Tomcat是否有一些内置的机制可以说:“嘿,当这个服务到零会话,它应该被删除”? 也许某种“最后一场会议已经过期”的事件,我可以挖掘。 如果其他人已经自动化这种应用程序的部署,我很想听到它。 谢谢!

开发人员构build最快的文件系统是什么?

我正在组build一个Linux框,它将作为一个持续集成构build服务器。 我们将主要构buildJava的东西,但我认为这个问题适用于任何编译语言。 我应该使用什么文件系统和configuration设置? (例如,我知道我不需要一个时间!)构build服务器将花费大量时间读取和写入小文件,并扫描目录以查看哪些文件已被修改。 更新:在这种情况下数据完整性是一个低优先级; 它只是一个构build机器…最终的工件将被压缩并存档在其他地方。 如果构build机上的文件系统被破坏并丢失所有数据,我们可以擦除和重新映像; 构build将继续像以前一样运行。

触发Jenkins为GitLab Web钩子的合并请求构build

我希望Jenkins(1.561)通过合并请求Web钩子触发来构build提交给GitLab(6.7.5)的合并(拉)请求。 我有一个参数化版本,Jenkins插件“GitLab Merge Request Builder”(1.2.0)和“GitLab Hook”(1.0.0)。 迁移到jenkinsCI是不幸的,不是一个真正的select。 只要variablesgitlabMergeRequestId , gitlabTargetBranch和gitlabSourceBranch可用,合并请求生成器插件就可以构build合并请求。 当插件轮询版本库本身,或者我使用手动载荷触发构build时(例如curl –data "gitlabMergeRequestId=3&so_on http://server_name/job/$JOB_NAME/buildWithParameters ),但是我无法做到这一点一个钩子。 使用GitLab Hook插件,我可以在JSON负载中获取必要的数据,但是这些值有“错误”的键: gitlabMergeRequestId是id gitlabTargetBranch是target_branch gitlabSourceBranch是source_branch 我已经尝试使用GitLab Merge Request Builder插件的要求configuration构build参数作为Name和variables值作为Default Value 。 不幸的是(也许是有意的), Default Value字段中的variables不会被replace,所以Jenkins正在寻找一个id ${id}和类似分支值的合并请求。 我没有findconfigurationGitLab发送的负载的方法,GitLab Hook插件和GitLab Merge Request Builder插件使用的参数名称都没有configuration选项。 我正在考虑编写一个小的PHP脚本来拦截和改变POST的有效载荷,然后传递给Jenkins。 虽然我确信这会起作用,但它绝对看起来不必要的复杂。 我能看到的唯一的另一个实际选项是改变插件的来源,但这使得它们升级成PITA。 我忽略了一些显而易见的事情,还是真的没有简单的方法来触发合并请求的构build与从GitLab到Jenkins的Web钩子?

确保持续集成服务的“洁净系统”的有效途径

我们希望为我们的项目build立一个持续集成(CI)服务。 CI服务应该控制项目生命周期的所有方面,包括部署。 也就是说,我们希望CI代理在每次迭代时都要使用干净的系统(特别是Ubuntu服务器),在那里部署我们的项目并运行testing。 我们可能会从头开始编写CI服务,因为我们的生态系统非常不寻常。 问题是:如何有效地为每个CI迭代提供干净的平板系统? 项目部署安装了几个Debian软件包,configuration了几个nginx站点,还在系统范围内的某个实现语言特定的软件包pipe理器(LuaRocks)中安装了一些软件包。 没有什么更多的侵入(我相信)。 所以,能够快速build立一个干净的板块(在现代硬件上一分钟之内,更快 – 更好)比确保绝对的隔离和清洁更重要。 我看到了两种方法来实现我们所需要的: 要么build立一个类似的监狱(如lxc,也许)。 或者安装一些可以做快照的虚拟机,并使用它们。 但在这一点上,我没有足够的信息来决定。 你会build议什么? 任何其他选项? 任何特定的工具名称? 注意:CI服务将在Citrix XenServer来宾中运行。 如果价格合理,付费解决scheme是可以的。 (通常他们在这个领域是不合理的。)远程CI解决scheme不好。

Gitlab CI – 通过SSH部署到远程服务器

我有一个使用Gitlab CI的Gitlab环境,用于一个新项目来certificate编译的文件,并通过rsync复制到生产服务器。 build立这些资源的机器执行是一个docker(节点6)的形象,但现在我不得不复制从该容器的结果文件的Docker命令到服务器使用Linux …我的问题是通过SSH通过连接rsync的。 目前我有以下几点: stages: – deploy before_script: – npm i – npm run build job_deploy: stage: deploy script: – ssh-keygen -t rsa -b 4096 -C '' -f ~/.ssh/deploy_rsa – ssh-keyscan -H 8.8.8.8 >> ~/.ssh/known_hosts – ssh-copy-id -i ~/.ssh/deploy_rsa.pub [email protected] – rsync -avuz $CI_PROJECT_DIR/dist/ [email protected]:/var/wwww/example.com only: – master 由此我得到: /usr/bin/ssh-copy-id: INFO: attempting to log […]