diff options
author | Wouter Admiraal <wouter.admiraal@sonarsource.com> | 2020-03-04 10:53:12 +0100 |
---|---|---|
committer | Wouter Admiraal <45544358+wouter-admiraal-sonarsource@users.noreply.github.com> | 2020-03-05 11:53:22 +0100 |
commit | ae038e155d03502e1dcd154408f29a057f089456 (patch) | |
tree | 41d2282274a704e28ad96dbe937fbdfbbd333e16 /it/packer | |
parent | 6da9b4b0c066d1e524a27aebc74cfd8d1b8ab19a (diff) | |
download | sonar-scanner-cli-ae038e155d03502e1dcd154408f29a057f089456.tar.gz sonar-scanner-cli-ae038e155d03502e1dcd154408f29a057f089456.zip |
BUILD-759 Move Jenkins + Travis QA to Cirrus CI
Diffstat (limited to 'it/packer')
-rw-r--r-- | it/packer/README.md | 23 | ||||
-rw-r--r-- | it/packer/setup.ps1 | 60 | ||||
-rw-r--r-- | it/packer/sonar-scanner-cli-qa.json | 29 |
3 files changed, 112 insertions, 0 deletions
diff --git a/it/packer/README.md b/it/packer/README.md new file mode 100644 index 0000000..57dcf88 --- /dev/null +++ b/it/packer/README.md @@ -0,0 +1,23 @@ +Custom Windows VM image for sonar-scanner-cli Windows ITs +========================================================= + +This defines a custom Windows image necessary for the ITs. It contains all [build tools helpers](https://github.com/SonarSource/buildTools/blob/docker/bin/), as well as Node JS, which is needed to scan the example projects. + +How to build this VM image +-------------------------- + +*This isn't supposed to be built by hand.* We have a special image on our Google Cloud project, called *packer-builder-v1*. This image gets started up by Cirrus CI in the `create_win_vm_task` (see [`../../.cirrus.yml`](../../.cirrus.yml)), and will use [Packer](https://packer.io/) to create our custom VM image. The Packer instructions are contained in the `sonar-scanner-cli-qa.json` file. + +Note that this image is rebuilt by Cirrus CI every time the `sonar-scanner-cli-qa.json` or `setup.ps1` files change (see the `create_win_vm_task`'s `skip` instruction in [`../../.cirrus.yml`](../../.cirrus.yml)). If no changes are detected, the build will be skipped, and the previously existing image will be used. + +How to debug this VM image +-------------------------- + +1. Log on to [Google Cloud](http://console.cloud.google.com/) +2. Go to our SonarQube project (ci-cd-215716) +3. Under *Compute Engine > Images*, you should see *packer-builder-v1*. Start a new VM with this image. + This image is pre-configured for using Packer, as well as pushing new VM images to our SonarQube project. +4. Once started, SSH into this VM (you can do this directly via the browser). +5. `sudo su` to use the root user (which is configured to use the GCE service account). + You can now add packer JSON files, and run the `packer build` command to test your new images. **Make sure you remove any test images from GCE.** + diff --git a/it/packer/setup.ps1 b/it/packer/setup.ps1 new file mode 100644 index 0000000..bfaca02 --- /dev/null +++ b/it/packer/setup.ps1 @@ -0,0 +1,60 @@ +$ErrorActionPreference = 'Stop' + +function Install-Chocolatey { + # Run the installer. + Set-ExecutionPolicy Bypass -Scope Process -Force; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) +} + +function Install-NodeJs { + choco install -y nodejs +} + +function Install-Buildtools { + $path = "${env:Temp}\buildTools.zip" + + # Fetch the build tools archive. + [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + (New-Object System.Net.WebClient).DownloadFile('https://github.com/SonarSource/buildTools/archive/docker.zip', $path) + + # Extract the archive to the C drive. + Add-Type -AssemblyName System.IO.Compression.FileSystem + [System.IO.Compression.ZipFile]::ExtractToDirectory($path, 'C:\') + + # Update global PATH. + $currentPath = (Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).Path + $updatedPath = $currentPath+';C:\buildTools-docker\bin' + Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH -Value $updatedPath + + # Remove archive. + del $path +} + +function Install-Maven { + choco install -y openjdk11 --version 11.0.4.11 + choco install -y maven --version 3.6.2 +} + +function Install-Git { + # We use Git to enable Unix Tools. This will allow us to use Bash-style + # commands in .cirrus.yml, like "source". + choco install -y git --version 2.23.0 --package-parameters "/GitAndUnixToolsOnPath" +} + +Write-Host "Install chocolatey" +Install-Chocolatey + +Write-Host "Install Maven" +Install-Maven + +Write-Host "Install NodeJs" +Install-NodeJs + +Write-Host "Install Unix Tools" +Install-Git + +Write-Host "Set up build tools" +Install-Buildtools + +# Disable antivirus analysis on C drive. +Write-Host "Finalize VM configuration" +Set-MpPreference -ScanAvgCPULoadFactor 5 -ExclusionPath "C:\" diff --git a/it/packer/sonar-scanner-cli-qa.json b/it/packer/sonar-scanner-cli-qa.json new file mode 100644 index 0000000..8ab3e86 --- /dev/null +++ b/it/packer/sonar-scanner-cli-qa.json @@ -0,0 +1,29 @@ +{ + "builders": [ + { + "type": "googlecompute", + "project_id": "ci-cd-215716", + "source_image": "windows-server-1809-dc-core-v20200211", + "image_name": "sonar-scanner-cli-qa", + "disk_size": "50", + "machine_type": "n1-standard-1", + "communicator": "winrm", + "winrm_username": "packer_user", + "winrm_insecure": true, + "winrm_use_ssl": true, + "metadata": { + "windows-startup-script-cmd": "winrm quickconfig -quiet & net user /add packer_user & net localgroup administrators packer_user /add & winrm set winrm/config/service/auth @{Basic=\"true\"}" + }, + "zone": "us-central1-a", + "tags": ["packer"] + } + ], + "provisioners": [ + { + "type": "powershell", + "scripts": [ + "{{template_dir}}/setup.ps1" + ] + } + ] +} |