Uplift Project

IaC, Packer/Vagrant workflows, and base boxes for SharePoint professionals.
Spend less time creating dev, uat, integration and lab environments with domain controllers, SQL servers, SharePoint farms and Visual Studio installs.

Infrastructure as code for SharePoint professionals

Leverage IaC and ready-to-use Vagrant boxes to create disposable SharePoint infrastructure.

Easy file download

Reduce effort to download, store and manage needed ISO files, installation media, service packs, patches and other binaries.

Uplift comes with PowerShell 6 module to download more than 120 resources including Windows updates, SharePoint binaries and language packs, Windows 2016 ISO and patches, SQL Server, Microsoft CRM, even Visual Studio 2017 and more.

Learn more
Pre-configured Packer templates

Packer is a great tool for automated creation of golden images for multiple platforms from a single source configuration.

Uplift provides Packer images for Windows and SharePoint workloads. Build your own or use Windows 2016, SQL Server 2016, SharePoint 2016 RTM, Feature Pack 1, Feature Pack 2, the latest, and even 18 language packs which are already pre-installed.

Learn more
Multi-Machine Vagrant environments

Vagrant enables users to create and configure lightweight, reproducible, and portable development environments.

Uplift relies on Vagrant to create and configure multi-machine environments consisting of domain controller, SQL Server, and SharePoint boxes. We ship a Vagrant plugin to simplify configuration of such complex and fragile infrastructure configurations.

Learn more
Works on Windows and MacOS

Uplift relies on Oracle VM VirtualBox to produce highly automated and repeatable Vagrant boxes and multi-machine environments.

Because of VirtualBox, virtual machines work smoothly on Windows and MacOS platforms. Uplift powers environments on Windows 2016, Windows 10, MacOS and even Windows 2008.

Pre-configured Jenkins CI/CD server

Infrastructure as code needs continuous integration and delivery server. Jenkins can be a good fit for continuous builds and testing.

Uplift comes with pre-configured Jenkins server. Packer builds and Vagrant testing are codified into Jenkins pipelines. You can use existing pipelines or build new pipelines from scratch.

Learn more
Automation building blocks

Uplift project is an attempt to lower down the initial cost of infrastructure as code automation for SharePoint professionals.

We try our best to heavy lift initial automation so that Uplift project can be used out of the box while still providing core building blocks for custom automation pipelines on top.

Learn more

Embracing frequent rebuild of dev, uat, integration and lab environments

Uplift project lowers down the initial cost of infrastructure provision.

3200+

Domain controllers built

7800+

SQL Server 2016 built

13000+

SharePoint 2016 farms built

1700+

vagrant-uplift plugin installs

Get started with Uplift Project

Start leveraging building blocks for your next infrastructure as code project.

vagrant-uplift plugin
vagrant-uplift plugin for Vagrant provides additional helpers for simplified configuration of domain controllers, domain joins, SQL Server, and SharePoint configurations.

  • > vagrant plugin install vagrant-uplift

vagrant-uplift helpers
Helper methods are exposed via Ruby class VagrantPlugins::Uplift::Config() and organized into two subsets receiving box name and vagrant box config.

uplift.set_xxx() are shortcuts to box resources such as cpu, ram, network, hostname and others.

uplift.provision_xxx() configures provisioners, operations like creating domain controllers, domain join, SQL Server image completion, and others.

uplift base boxes
vagrant-uplift plugin best works with uplift base boxes. Opinionated infrastructure configuration needs several PowerShell modules to be on the box. Check documentation on how it can work with custom boxes.


# create uplift configuration helper
uplift = VagrantPlugins::Uplift::Config()

# multi-machine environment with dc and sql boxes
Vagrant.configure("2") do |config|

  # vagrant box for domain controller
  config.vm.define "dc" do | vm_config | 
    # .. some usual Vagrant configuration
  
    # base configuration
    uplift.set_2Gb("dc", vm_config)
    uplift.set_hostname("dc", vm_config, "dc")   

    # join to domain controller
    uplift.set_private_dc_network("dc", vm_config)   
  uplift.provision_win16_dsc_soe("dc", vm_config)
    uplift.provision_dc16("dc", vm_config)
  end

  # vagrant box for SQL Server
  config.vm.define "sql" do | vm_config |   
    # .. some usual Vagrant configuration

    # base configuration
    uplift.set_6Gb("sql", vm_config)
    uplift.set_hostname("sql", vm_config, "sql")   
    
    # join to domain controller
    uplift.set_client_network("sql", vm_config, "sql")
    uplift.provision_win16_dsc_soe("sql", vm_config)
    uplift.provision_dc_join("sql", vm_config)
  
    # complete SQL Server image
    uplift.provision_sql16_complete_image("sql", vm_config)
  end
end

vagrant-uplift plugin
vagrant-uplift plugin for Vagrant provides additional helpers for simplified configuration of domain controllers, domain joins, SQL Server, and SharePoint configurations.

  • > vagrant plugin install vagrant-uplift

vagrant-uplift helpers
Helper methods are exposed via Ruby class VagrantPlugins::Uplift::Config() and organized into two subsets receiving box name and vagrant box config.

uplift.set_xxx() are shortcuts to box resources such as cpu, ram, network, hostname and others.

uplift.provision_xxx() configures provisioners, operations like creating domain controllers, domain join, SQL Server image completion, and others.

uplift base boxes
vagrant-uplift plugin best works with uplift base boxes. Opinionated infrastructure configuration needs several PowerShell modules to be on the box. Check documentation on how it can work with custom boxes.


# create uplift configuration helper
uplift = VagrantPlugins::Uplift::Config()

# multi-machine environment with dc and sql boxes
Vagrant.configure("2") do |config|	 

  # vagrant box for SQL Server + SharePoint
  config.vm.define "sql-sp16" do | vm_config | 
    # .. some usual Vagrant configuration

    # base configuration
    uplift.set_6Gb("sql-sp16", vm_config)
    uplift.set_hostname("sql-sp16", vm_config, "sql-sp16")   
  
    # join to domain controller
    uplift.set_client_network("sql-sp16", vm_config, "sql-sp16")
    uplift.provision_win16_dsc_soe("sql-sp16", vm_config)
    uplift.provision_dc_join("sql-sp16", vm_config)

    # complete SQL Server image
    uplift.provision_sql16_complete_image("sql-sp16", vm_config)

    # provision SharePoint Single farm
    uplift.provision_sp16_pre_setup("sql-sp16", vm_config)

    uplift.provision_sp16_sp_accounts("sql-sp16", vm_config)
    uplift.provision_sp16_sql_accounts("sql-sp16", vm_config)
  
    uplift.provision_sp16_single_server_farm("sql-sp16", vm_config)
    uplift.provision_sp16_minimal_services("sql-sp16", vm_config)
  
    uplift.provision_sp16_farm_post_setup("sql-sp16", vm_config)

    uplift.provision_sp16_web_application("sql-sp16", vm_config)
  end

end

Invoke-Uplift module
invoke-uplift is a PowerShell module which automates file downloads, checksum validation, file service and transferring.

PowerShell Core 6.0 is used to make this module portable across Windows and MacOS platforms.

Invoke-Uplift CLI
invoke-uplift resource download command downloads file resource by its name.

invoke-uplift resource list command shows a list of more than 120 resources which are shipped by default.

invoke-uplift resource validate-uri command checks files resource URIs to ensure that they are still available.

Other options
-r or -repository option specifies a local folder where to save all files

-d or -debug option produces more trace so you can see what is happening.


# get into PowerShell 6 command line
# with PS6, file download works on Windows and MacOS
pwsh 

# install InvokeUplift PowerShell module
Install-Module -Name InvokeUplift

# check the version
Invoke-Uplift
Invoke-Uplift version

# download Windows 2016 Server ISO image
Invoke-Uplift resource download ms-win-2016-iso-x64-eval

# download SQL Server 2016 installation media
Invoke-Uplift resource download ms-sql-server2016-rtm

# download SharePoint 2016 RTM installation media
Invoke-Uplift resource download ms-sharepoint2016-rtm

# download SharePoint updates
Invoke-Uplift resource download ms-sharepoint2016-update-2019.01.08

# download SharePoint German language pack
Invoke-Uplift resource download ms-sharepoint2016-lang-pack-de-de

# download Visual Studio 2017 pre-configured for Office Development
Invoke-Uplift resource download ms-visualstudio-2017.ent-dist-office-dev

# show more than 120 built-in resources to download!
Invoke-Uplift resource list

# download Windows 2016 ISO into local folder
Invoke-Uplift resource download ms-win-2016-iso-x64-eval -r c:/my-files

# all command use -d or -debug switch too
Invoke-Uplift resource download ms-sql-server2016-rtm -d
Invoke-Uplift resource download ms-sql-server2016-rtm -debug

Packer templates
Packer is a great tool for automated creation of golden images for multiple platforms from a single source configuration.

Uplift project comes with templates for building golden images for Windows 2016, SQL Server 2016, SharePoint 2016 RTM, Feature Pack 1, Feature Pack 2 and more.

  • This is an advanced scenario.
  • Previous experience with Packer is desired.

Building images
Building base images is really easy. Most of the things are pre-scripted with the help of PowerShell and Invoke-Build automation.

invoke-build ? command shows available tasks.

invoke-build -packerImageName command builds an image by its name.

invoke-build -packerImageName -Task PackerRebuild command force rebuilds an image.

invoke-build -packerImageName -Task VagrantBoxTest command runs automation to test the image.

invoke-build -packerImageName -Task VagrantBoxAdd adds newly build image into Vagrant.


# get the source code
git clone https://github.com/SubPointSolutions/uplift-packer.git
cd uplift-packer	

# build, rebuild, test and and add minimal ubuntu-trusty64 box
invoke-build -packerImageName ubuntu-trusty64
invoke-build -packerImageName ubuntu-trusty64 -Task PackerRebuild
invoke-build -packerImageName ubuntu-trusty64 -Task VagrantBoxTest
invoke-build -packerImageName ubuntu-trusty64 -Task VagrantBoxAdd

# build windows base boxes - as is, and with the recent updates
invoke-build -packerImageName win-2016-datacenter-soe         
invoke-build -packerImageName win-2016-datacenter-soe-latest  

# build application base boxes
# -UPLF_INPUT_BOX_NAME specifies initial Vagrant box to start with
# all these boxes requires a local file repository built by invoke-uplift

invoke-build -packerImageName win-2016-datacenter-app 
  -UPLF_INPUT_BOX_NAME uplift-local/win-2016-datacenter-soe-latest-master

invoke-build -packerImageName win-2016-datacenter-app-sql16 
  -UPLF_INPUT_BOX_NAME uplift-local/win-2016-datacenter-soe-latest-master

# build SharePoint base boxes
invoke-build -packerImageName  win-2016-datacenter-sp2016rtm-sql16-vs17 
  -UPLF_INPUT_BOX_NAME uplift-local/win-2016-datacenter-app-sql16-master

invoke-build -packerImageName  win-2016-datacenter-sp2016fp1-sql16-vs17 
  -UPLF_INPUT_BOX_NAME uplift-local/win-2016-datacenter-app-sql16-master

invoke-build -packerImageName  win-2016-datacenter-sp2016fp2-sql16-vs17 
  -UPLF_INPUT_BOX_NAME uplift-local/win-2016-datacenter-app-sql16-master

invoke-build -packerImageName  win-2016-datacenter-sp2016latest-sql16-vs17 
  -UPLF_INPUT_BOX_NAME uplift-local/win-2016-datacenter-app-sql16-master

Jenkins Server
Infrastructure as code needs continuous integration and delivery server. Jenkins can be a good fit for continuous builds and testing.

Uplift comes with pre-configured Jenkins to build and test Packer templates and Vagrant environments.

  • This is an advanced scenario.
  • Previous experience with Jenkins is desired.

Running Jenkins server
Standing up a new jenkins server is super-easy. Most of the things are pre-scripted with the help of PowerShell and Invoke-Build automation.

invoke-build ? command shows available tasks.

invoke-build StartServer command builds and starts Jenkins server.

invoke-build StartAgent command starts and joins Jenkins agent to the server.

invoke-build SyncJobs command configures default jobs and views for the Uplift project.


# get the latest from the GitHub
git clone https://github.com/SubPointSolutions/uplift-cicd-jenkins2.git
cd uplift-cicd-jenkins2

# start jenkins server on http://localhost:10000
# default user and password are the same: uplift
invoke-build StartServer

# start jenkins agent
invoke-build StartAgent

# configure default jobs and views
invoke-build SyncJobs

Supporting professionals and teams of any size

You aren't left alone, more features and support options are available.

Get more donefaster

Open source solves complexity for practitioners.

Pro solves organizational level challenges while building and maintaining dev, uat, integration and lab environments.

If you are looking for additional advanced features not listed here, drop us a line.

Open Source

For individuals & small teams

Free

  • Basic Packer templates
    • Windows 2016
    • SharePoint 2016
    • SQL Server 2016
    • Visual Studio 2017
  • Vagrant + VirtualBox
  • Basic Vagrant configurations
    • Domain controller
    • SQL Server 2016
    • SharePoint Single farm
    • Visual Studio 2017
  • Pre-configured Jenkins CI/CD
  • Basic Community Support

Pro

For businesess & enterprises

  • Advanced Packer templates
    • Windows 2012 R2, 2016, 2019
    • SharePoint 2013, 2016, 2019
    • SQL Server 2012, 2014, 2016, 2019
    • Visual Studio 2013, 2015, 2017, 2019
  • Hyper-V / Azure / other
  • Advanced Vagrant configurations
    • Domain controller HA
    • SQL Server's AG
    • More SharePoint farm topologies
      • SharePoint + ADFS
      • Hybrid configuration
      • Office Online Server
      • Workflow Manager
      • SharePoint Add-ins
      • Search topologies
      • ... and others
    • other dev, uat and labs scenarios
  • Jenkins / Azure Piplines / other
  • 12x5 / Slack / Email / other

Resources and documentation

Documentation and resource on Uplift Project