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 | |
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')
-rw-r--r-- | it/docker/Dockerfile | 21 | ||||
-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 | ||||
-rw-r--r-- | it/src/test/java/com/sonarsource/scanner/it/ScannerTestCase.java | 5 |
5 files changed, 137 insertions, 1 deletions
diff --git a/it/docker/Dockerfile b/it/docker/Dockerfile new file mode 100644 index 0000000..78df5f3 --- /dev/null +++ b/it/docker/Dockerfile @@ -0,0 +1,21 @@ +#------------------------------------------------------------------------------ +# Installs NodeJS, which is needed for running the Linux ITs. +# +# Build from the basedir: +# docker build -f it/docker/Dockerfile-qa -t sonar-scanner-cli-qa it/docker +# +# Verify the content of the image by running a shell session in it: +# docker run -it sonar-scanner-cli-qa bash +# +# CirrusCI builds the image when needed. No need to manually upload it to +# Google Cloud Container Registry. See section "gke_container" of .cirrus.yml +#------------------------------------------------------------------------------ + +FROM gcr.io/ci-cd-215716/base:latest + +USER root + +RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - +RUN apt-get install -y nodejs + +USER sonarsource 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" + ] + } + ] +} diff --git a/it/src/test/java/com/sonarsource/scanner/it/ScannerTestCase.java b/it/src/test/java/com/sonarsource/scanner/it/ScannerTestCase.java index 086cba9..f03e757 100644 --- a/it/src/test/java/com/sonarsource/scanner/it/ScannerTestCase.java +++ b/it/src/test/java/com/sonarsource/scanner/it/ScannerTestCase.java @@ -68,13 +68,16 @@ public abstract class ScannerTestCase { if (StringUtils.isNotBlank(scannerVersion)) { LOG.info("Use provided Scanner version: " + scannerVersion); artifactVersion = Version.create(scannerVersion); + } else if (StringUtils.isNotBlank(System.getenv("PROJECT_VERSION"))) { + scannerVersion = System.getenv("PROJECT_VERSION"); + LOG.info("Use Scanner version from environment: " + scannerVersion); + artifactVersion = Version.create(scannerVersion); } else { try (FileInputStream fis = new FileInputStream( new File("../target/maven-archiver/pom.properties"))) { Properties props = new Properties(); props.load(fis); artifactVersion = Version.create(props.getProperty("version")); - return artifactVersion; } catch (IOException e) { throw new IllegalStateException(e); } |