Migration from SSRS 2012 to SSRS 2017
Here's the process I use to migrate to a new report server. This is assuming you are not already using source control and you don't have a Visual Studio solution for your reports. If you do, skip to #4. If you have the database permissions, you can use the Microsoft guide Moving the Report Server Databases.
1. Backup deployed reports

Remote to the current report server.

%systemroot%/system32/mstsc.exe

Then save the following procedure as a .rss file and run it with the parameter parentFolder=&quot;&quot; as a zero string to save the entire folder structure with all the reports.

Command Line:
rs -s http://localhost/reportserver -i D:\Scripts\Backup_Reports.rss -e Mgmt2010 -v backupFolder=&quot;D:\Scripts\BackupReports&quot; -v parentFolder=&quot;&quot;
Report Backup Procedure:
Public Sub Main()
    '--------------------------------------------------------------------------------------------------------------------
    ' Purpose:   Script to backup reports from a folder on ReportServer
    '            Save file as .rss extension and run using rs.exe from command line.
    ' Reference: http://bhushan.extreme-advice.com/back-up-of-ssrs-reports-using-rs-utility/
    '            https://docs.microsoft.com/en-us/sql/reporting-services/tools/rs-exe-utility-ssrs?view=sql-server-2017
    ' Example:   rs -s http://localhost/reportserver -i D:\Scripts\Backup_Reports.rss -e Mgmt2010 -v backupFolder=&quot;D:\Scripts\BackupReports&quot; -v parentFolder=&quot;/IndividualReportFolderNameHere&quot;
    '            rs -s http://localhost/reportserver -i D:\Scripts\Backup_Reports.rss -e Mgmt2010 -v backupFolder=&quot;D:\Scripts\BackupReports&quot; -v parentFolder=&quot;&quot;
    '--------------------------------------------------------------------------------------------------------------------
    Try
        rs.Credentials = System.Net.CredentialCache.DefaultCredentials
        Dim items As CatalogItem() = Nothing

        If String.IsNullOrEmpty(parentFolder) Then
            items = rs.ListChildren(&quot;/&quot;, True)
        Else
            items = rs.ListChildren(parentFolder, False)
        End If

        Console.WriteLine()
        Console.WriteLine(&quot;...Reports Back Up Started...&quot;)

        For Each item As CatalogItem In items
            If item.TypeName = &quot;Report&quot; Then
                Console.WriteLine(item.Path)
                Dim reportPath As String = item.Path
                parentFolder = Path.GetDirectoryName(item.Path) ' comment out this line to save the reports in one folder
                Dim reportDefinition As Byte() = rs.GetItemDefinition(item.Path)
                Dim rdlReport As New System.Xml.XmlDocument
                Dim Stream As New MemoryStream(reportDefinition)
                Dim backupPath As String = Path.Combine(backupFolder, Date.Now().ToString(&quot;yyyy.MM.dd&quot;) + &quot;\&quot; + parentFolder)

                If (Not System.IO.Directory.Exists(backupPath)) Then
                    System.IO.Directory.CreateDirectory(backupPath)
                End If

                rdlReport.Load(Stream)
                rdlReport.Save(Path.Combine(backupPath, item.Name + &quot;.rdl&quot;))

                Console.WriteLine(item.Name + &quot;.rdl&quot;)
            End If
        Next

        Console.WriteLine(&quot;...Reports Back Up Completed...&quot;)
        Console.WriteLine()

    Catch e As Exception
        Console.WriteLine(e.Message)

    End Try

End Sub

2. Create a Visual Studio solution

Make a report project per report folder under one solution.
Add the reports from the backup .rdl files
Add Shared Data Sources
Add Shared Datasets


3. Use source control with Microsoft Azure DevOps Services

It's free for teams of 5 or less
You can pick a site name with your organization in the url. e.g. https://yourcompany.visualstudio.com
url: https://azure.microsoft.com/en-au/services/devops/

4. Setup deployment configuration
Setup the target deployment settings for each report project using the Configuration Manager.
Report Project Configuration

Configuration Manager

5. Build the solution

I only use this option for the initial build. After that, you can deploy individual reports by right clicking them and selecting Deploy.