This post actually started with an Issue I created in NavContainerHelper GitHub.
I’m working in a script for Continuous Integration and although the creation of a container requires a few minutes I was looking at how to optimize the time of execution of the whole build process.
Freddy Kristiansen is a Microsoft Evangelist that is working hard to make it easier to work with NAV using Docker Containers, thanks again, Freddy.
Freddy initially marked my issue with label “WONTFIX” but after I explained to him my motivation he changed the label to “ENHANCEMENT”
He did not include any new functionality to NavContainerHelper but he kindly provided me with the script to copy and paste, and as I always do, I like to share good things.
Solution:
Right after the creation of a NAV Container, run the following script:
# To add just after the creation of the NAV Container
$containerName = "scadev"
$config = Get-NavContainerServerConfiguration -ContainerName $containerName
Invoke-ScriptInNavContainer -containerName $containerName -scriptblock {
Param($DatabaseServer, $DatabaseInstance, $DatabaseName, $NewDatabaseName)
Copy-navDatabase -DatabaseServer $DatabaseServer -DatabaseInstance
$DatabaseInstance -SourceDatabaseName $DatabaseName -DestinationDatabaseName
$NewDatabaseName
} -argumentList $config.DatabaseServer, $config.DatabaseInstance, $config.DatabaseName, "backup"
So next time you run the build process, just verify that the Container exists and in case replace the database with the backup taken previously (it takes 10-20 seconds)
$containerName = "scadev"
if (Test-NavContainer $containerName) {
$config = Get-NavContainerServerConfiguration -ContainerName $containerName
Invoke-ScriptInNavContainer -containerName $containerName -scriptblock {
Param($DatabaseServer, $DatabaseInstance, $DatabaseName, $NewDatabaseName)
Copy-navDatabase -DatabaseServer $DatabaseServer -DatabaseInstance
$DatabaseInstance -SourceDatabaseName $DatabaseName -DestinationDatabaseName
$NewDatabaseName
} -argumentList $config.DatabaseServer, $config.DatabaseInstance, "backup", $config.DatabaseName
} else {
# Creation of NAV Container
}
Source: https://github.com/Microsoft/navcontainerhelper/issues/315
Update 08/09/2019: With the release of ContainerHelper 0.6.4.1 the logic described in this post has been integrated as a new feature as described in Freddy’s post section “Speed up repetitive container generation“
https://freddysblog.com/2019/09/08/containerhelper-0-6-4-1/
Did my HOW TO help you? Leave a reply.