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.