Welcome to the Inedo Forums! Check out the Forums Guide for help getting started.

If you are experiencing any issues with the forum software, please visit the Contact Form on our website and let us know!

Simultaneous Builds for Application



  • We need to have two workflows for our app. One for the main, full, deployment through Dev, UAT, Staging, Production and the other for individual assembly patching.

    I've developed a patching workflow which, for maintainability, uses the same integration deployment plan as the main workflow. This works fine generally as an environment variable keeps the artifacts seperated. However, the E:\BuildMaster_SVCTMP_A3 folder is currently being used by both workflows which is causing missing file exceptions etc.

    How can I force the patching workflow to use a seperate set of folders? Is the 'A' of _A3 related to the app instance? If so, I guess we'll have to not build simutaneously.



  • The 3 in the _A3 directory represents application ID 3. To workaround this you could specify your own directories by using a release dropdown list variable (with values Main & Patch). Then instead of the default directory, anything in the Integration environment that uses the default directory would be changed to "~%WORKFLOW%", and set the default value of the WORKFLOW variable value to Main. Just make sure whenever you're on the the patch workflow that Patch is selected as the variable value for that release.



  • Thanks for the reply Tod.

    Could you provide a bit more detail? For example, how/where do I actually make use of the release variable to influence the folders currently used? I can't see anywhere to specify that.



  • Once you've created the dropdown list release variable "WORKFLOW", you can set its value for each release you create from the Edit Release details page.

    To specify the paths, this must be done manually in each of the actions in your Integration plan. Basically, wherever you have "default directory" as the source directory, replace it with "~%WORKFLOW%".

    Now, whenever you create a build of a particular release, the build output (or whatever the actions happen to be doing) will use the "~%WORKFLOW%" directory which will translate to _A3\Patch or _A3\Main based on the release variable value. This way if you create builds of two releases with different variable values at the same time, the executer will use two different directories and your errors should disappear.



  • I can't see that at all. I'm already specifying variable-based paths in the Integration deployment plan (I don't have any Default Paths anywhere) but it's these drive:\BuildMaster_SVCTMP_A3 folders I don;t seem to be able to alter.

    It looks like I either have to accept the limitation of not being able to build for both workflows at the same time, or potentially, have a different integration plan for each?

    Please let me know what to do if I'm still missing something.

    Thanks.



  • You're correct in that you cannot alter the _A3 path, but you shouldn't be getting any missing file exceptions if each action uses a source directory in a different subdirectory under _A3 (which is what should happen with my previous suggestion). Could you copy/paste the actual error you're getting when this happens?



  • Here's one error. It was thrown by our main workflow shortly after starting our patching one. Note: These are sharing the same integration plan.

    Build 26 for CliVe 2.120.0 (27/07/2012 13:43:50)
    Action Group 8: CliVe.WindowsClient
    Action 2: Create 'Client (TraderUI)' Artifact from E:\BuildMaster\EMCBuilds\Clive%TFSBranch%\Clive\Bin\WindowsClient
    Initializing Action...
    RemoteAction Initialization Complete:
    Temp Directory: E:\BuildMaster_SVCTMP_A3_S7\TMP
    Source Directory: E:\BuildMaster\EMCBuilds\Clive\EMC\Clive\Bin\WindowsClient
    Target Directory: E:\BuildMaster_SVCTMP_A3_S7\WRK
    Server: SV107549 (Id: 1)
    Initialization Complete. Executing...
    Preparing directories...
    Zipping output...
    Transferring file to artifact library...
    An unhandled exception occurred while executing this action: System.IO.DirectoryNotFoundException: Could not find a part of the path 'E:\BuildMaster_SVCTMP_A3_S7\TMP\Client (TraderUI).zip'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) at Inedo.BuildMaster.Extensibility.Agents.LocalFileOperationsExecuter.ReadFileBytes(String path, Int64 streamStartPosition, Int32 count) at Inedo.BuildMaster.Extensibility.Agents.Local.LocalAgent.Inedo.BuildMaster.Extensibility.Agents.IFileOperationsExecuter.ReadFileBytes(String path, Int64 streamStartPosition, Int32 count) at Inedo.BuildMaster.Util.Files.TransferFile(IFileOperationsExecuter sourceAgent, String sourceFilePath, IFileOperationsExecuter targetAgent, String targetFilePath) at Inedo.BuildMaster.Extensibility.Actions.Artifacts.CreateArtifactAction.Execute() at Inedo.BuildMaster.Extensibility.Actions.ActionBase.ExecuteOnce()

    All our paths in the plan are set (not left as default) with variables to ensure different paths between main and patching. However, these temp folder seem to be shared , app wide, regardless.



  • My fault, I had forgotten about the shared TMP directory and was focused on the WRK and SRC ones. It appears then that building the same app but different workflows at the same time is not currently supported, but there are workarounds.

    As an example, you could use a different environment (e.g. Integration2) for the patch workflow, then link/share all the action groups from Integration. If you were to then install a BuildMaster agent on the BuildMaster server (and add it via the Servers page), that agent would have its own set of temporary directories. All you'd have to do is update the "default server" setting for each action group in Integration2 to point to the agent server.



Inedo Website HomeSupport HomeCode of ConductForums GuideDocumentation