3

我在服务器上设置了 CruiseControl.NET。我让一切工作正常。一切都意味着,从 SVN 中提取代码,构建它,在成功构建后,使用项目触发器启动项目设置以将代码部署到 DEV 环境。我添加了一些内部安全设置,主要是用户组。我正在使用 LDAP 安全性。当我添加安全功能时,我到 DEV 服务器的自动部署停止工作。我可以强制构建项目以使其部署,但是当项目 #1 成功构建时,当部署项目的触发器启动时,我收到以下错误(出于安全目的,我将项目名称替换为 PROJECT):

2010-07-20 13:28:19,354 [PROJECT:DEBUG] 从服务器检索 ProjectStatus:tcp://localhost:21234/CruiseManager.rem
2010-07-20 13:28:19,355 [PROJECT:ERROR] 例外:项目CCNet 服务器上不存在“项目”。

ThoughtWorks.CruiseControl.Remote.NoSuchProjectException:CCNet 服务器上不存在项目“PROJECT”。
在 ThoughtWorks.CruiseControl.Core.Triggers.ProjectTrigger.GetCurrentProjectStatus()
在 ThoughtWorks.CruiseControl.Core.Triggers.ProjectTrigger.Fire()
在 ThoughtWorks.CruiseControl.Core.Triggers.MultipleTrigger.Fire()
在 ThoughtWorks.CruiseControl.Core.ProjectIntegrator .PollTriggers()
在 ThoughtWorks.CruiseControl.Core.ProjectIntegrator.Integrate()
在 ThoughtWorks.CruiseControl.Core.ProjectIntegrator.Run()

我为 CruiseControl 设置了一个活动目录帐户,并且该服务在该用户帐户(具有管理员权限)下运行。通过将用户添加到 CruiseControl 配置的内部设置部分中的“管理员”组,我已授予 CruiseControl 用户对所有项目的完全访问权限。

关于如何使 CruiseControl 可以访问项目以便它可以看到执行自动部署的任何想法?

4

2 回答 2

0

我认为您需要为您的角色定义安全设置 - 我在那里看不到任何内部安全标记。拥有 AD 权限和帐户很好,但您需要告诉 CCNet 这些是什么意思。尝试在您的项目标签中添加以下内容(当然,在更改域名和组名之后):

<internalSecurity>        
    <permissions>
        <!-- Roles -->
        <rolePermission name="Admin" forceBuild="Allow" startProject="Allow" >
            <users>
                <userName name="DOMAIN\GROUP1\"/>
            </users>         
        </rolePermission>
        <rolePermission name="Developers" forceBuild="Deny" startProject="Deny">
            <users>
                <userName name="DOMAIN\GROUP2\"/>
            </users>
        </rolePermission>
    </permissions>
</internalSecurity>
于 2010-07-21T18:06:58.880 回答
0

这是监控 Web 项目的自动部署代码,一旦成功构建,它应该会启动。而且,这在没有内部安全配置的情况下确实有效:

<cb:scope ProjectName="$(projMhWebDevDeploy)">
<project name="$(projMhWebDevDeploy)" queue="Q1" queuePriority="1">
  <cb:define safeProjectName="MH_Web_Dev_Branch_Deployment"/>
  <cb:define projectDirectory="$(ccnetDirectory)\Projects\$(safeProjectName)"/>

  <triggers>
    <projectTrigger project="$(projMhWeb)">
      <triggerStatus>Success</triggerStatus>
      <innerTrigger type="intervalTrigger" seconds="5" buildCondition="IfModificationExists" />
    </projectTrigger>
    <projectTrigger project="$(projMhWeb)">
      <triggerStatus>Success</triggerStatus>
      <innerTrigger type="intervalTrigger" seconds="5" buildCondition="ForceBuild" />
    </projectTrigger>
  </triggers>

  <category>DEV Deployments</category>
  <webURL>$(urlCcnetDashBoard)</webURL>
  <workingDirectory>$(projectDirectory)</workingDirectory>
  <artifactDirectory>$(ccnetDirectory)\BuildFiles\$(safeProjectName)</artifactDirectory>

  <tasks>
    <!-- Deploy Code -->
    <exec>
      <executable>$(deployCodeBat)</executable>
      <buildArgs>
        $(ccnetDirectory)\Projects\MH_Web\Web
        $(deployMhWebDev)
        brh
      </buildArgs>
      <baseDirectory>$(ccnetDirectory)\BatchFiles\</baseDirectory>
    </exec>
    <!-- Deploy Helicon HTTPD -->
    <exec>
      <executable>$(deployHeliconBat)</executable>
      <buildArgs>
        $(ccnetDirectory)\Projects\MH_Web\Web
        "$(deployHeliconDev)"
        httpd.conf
      </buildArgs>
      <baseDirectory>$(ccnetDirectory)\BatchFiles\</baseDirectory>
    </exec>
  </tasks>
  <publishers>
    <xmllogger />
    <modificationHistory onlyLogWhenChangesFound="true" />
    <email mailport="25" includeDetails="true" useSSL="false" from="FROM" mailhost="SERVER">
      <users>
        EMAIL ADDRESSES ARE HERE
      </users>
      <groups>
        <group name="BuildMaster">
          <notifications>
            <notificationType>Always</notificationType>
          </notifications>
        </group>
      </groups>
    </email>
  </publishers>
  <security type="defaultProjectSecurity" defaultRight="Deny">
    <permissions>
      <rolePermission name="Developers" ref="Developers"/>
      <rolePermission name="Admin" ref="Admin"/>
    </permissions>
  </security>
</project>   
</cb:scope>
于 2010-07-20T21:18:00.620 回答