From ac6b95fc1f1fe5866bee8eb427083dc0a435c47b Mon Sep 17 00:00:00 2001 From: Josh Kalderimis Date: Thu, 30 May 2019 16:21:34 +0100 Subject: [PATCH 1/4] start a windows 2019 image --- ci-windows-2019.yml | 92 +++++++++++++++++++ cookbooks/travis_ci_windows_2019/.rspec | 4 + cookbooks/travis_ci_windows_2019/README.md | 4 + .../attributes/default.rb | 70 ++++++++++++++ cookbooks/travis_ci_windows_2019/metadata.rb | 20 ++++ .../travis_ci_windows_2019/recipes/default.rb | 27 ++++++ .../windows-server-2019-packages.txt | 21 +++++ packer-assets/windows-server-2019-purge.txt | 0 8 files changed, 238 insertions(+) create mode 100644 ci-windows-2019.yml create mode 100644 cookbooks/travis_ci_windows_2019/.rspec create mode 100644 cookbooks/travis_ci_windows_2019/README.md create mode 100644 cookbooks/travis_ci_windows_2019/attributes/default.rb create mode 100644 cookbooks/travis_ci_windows_2019/metadata.rb create mode 100644 cookbooks/travis_ci_windows_2019/recipes/default.rb create mode 100644 packer-assets/windows-server-2019-packages.txt create mode 100644 packer-assets/windows-server-2019-purge.txt diff --git a/ci-windows-2019.yml b/ci-windows-2019.yml new file mode 100644 index 000000000..7b3988684 --- /dev/null +++ b/ci-windows-2019.yml @@ -0,0 +1,92 @@ +--- +description: Travis CI Windows 2019 (for containers) build env template +variables: + gce_account_file: "{{ env `GCE_ACCOUNT_FILE` }}" + gce_project_id: "{{ env `GCE_PROJECT_ID` }}" + gce_image_family: "windows-2019-for-containers" + image_name: travis-ci-windows-2019-containers-{{ timestamp }}-<%= git_desc %> + dist_name: 2019-containers + travis_cookbooks_branch: "{{ env `TRAVIS_COOKBOOKS_BRANCH` }}" + travis_cookbooks_edge_branch: master + travis_cookbooks_sha: "{{ env `TRAVIS_COOKBOOKS_SHA` }}" + travis_uid: "{{ env `TRAVIS_UID` }}" +builders: +- type: googlecompute + name: googlecompute + communicator: winrm + winrm_username: travis + winrm_use_ssl: true + winrm_insecure: true + image_description: Travis CI Windows 2019 (for containers) + account_file: "{{ user `gce_account_file` }}" + project_id: "{{ user `gce_project_id` }}" + source_image: "{{ user `gce_image_family` }}" + zone: us-central1-a + image_name: "{{ user `image_name` }}" + machine_type: n1-standard-4 + disk_size: 70 + metadata: + windows-startup-script-cmd: "winrm quickconfig -quiet & net user /add travis & net localgroup administrators travis /add & winrm set winrm/config/service/auth @{Basic=\"true\"} & powershell -Command \"& {Set-ExecutionPolicy AllSigned -Force}\"" + tags: + - ci + - windows + - windows-2019 + - travis-ci-packer-templates + state_timeout: 10m +provisioners: +- type: file + source: tmp/git-meta + destination: c:/windows/temp/ +- type: file + source: packer-assets/windows-server-2019-packages.txt + destination: c:/windows/temp/packages.txt +- type: file + source: packer-scripts/Run-BashScript.ps1 + destination: c:/windows/temp/Run-BashScript.ps1 +- type: powershell + scripts: + - packer-scripts/Bootstrap-Windows.ps1 + environment_vars: + - "JOB_BOARD_REGISTER_FILE=c:/travis-job-board-register.yml" + - "SYSTEM_INFO_JSON=c:/travis_system_info.json" +- type: powershell + scripts: + - packer-scripts/packer-env-dump + - packer-scripts/clone-travis-cookbooks + environment_vars: + - CHEF_TMP=/c/windows/temp/chef-stuff + - GIT_META_DIR=/c/windows/temp/git-meta + - PACKER_ENV_DIR=/c/.packer-env + - TRAVIS_COOKBOOKS_BRANCH={{ user `travis_cookbooks_branch` }} + - TRAVIS_COOKBOOKS_SHA={{ user `travis_cookbooks_sha` }} + execute_command: powershell -executionpolicy bypass "& { if (Test-Path variable:global:ProgressPreference){$ProgressPreference='SilentlyContinue'};. {{.Vars}}; & c:/windows/temp/Run-BashScript.ps1 -bashscript '{{.Path}}'; exit $LastExitCode }" +- type: powershell + scripts: + # TODO: write job board data via chef + - packer-scripts/create-windows-job-board-data + - packer-scripts/create-image-metadata-tarball + environment_vars: + - "IMAGE_METADATA_TARBALL=/c/windows/temp/image-metadata-{{ user `image_name` }}.tar.bz2" + - JOB_BOARD_REGISTER_FILE=/c/travis-job-board-register.yml + - JOB_BOARD_IMAGE_DIST={{ user `dist_name` }} + - PACKER_ENV_DIR=/c/.packer-env + - SYSTEM_INFO_JSON=/c/travis_system_info.json + - TMPDIR=/c/windows/temp + - NODE_ATTRIBUTES_YML=/c/.node-attributes.yml + - RSPEC_JSON_DIR=/c/Users/travis + - DPKG_MANIFEST_JSON=/c/.dpkg-manifest.json + - BIN_LIB_CHECKSUMS=/c/.bin-lib.SHA256SUMS + execute_command: powershell -executionpolicy bypass "& { if (Test-Path variable:global:ProgressPreference){$ProgressPreference='SilentlyContinue'};. {{.Vars}}; & c:/windows/temp/Run-BashScript.ps1 -bashscript '{{.Path}}'; exit $LastExitCode }" +- type: file + source: "c:/windows/temp/image-metadata-{{ user `image_name` }}.tar.bz2" + destination: tmp/image-metadata-{{ user `image_name` }}.tar.bz2 + direction: download +post-processors: +- + - type: shell-local + script: bin/job-board-register + environment_vars: + - IMAGE_NAME={{ user `image_name` }} +- + - type: shell-local + script: bin/write-latest-image-name diff --git a/cookbooks/travis_ci_windows_2019/.rspec b/cookbooks/travis_ci_windows_2019/.rspec new file mode 100644 index 000000000..d8e1838e0 --- /dev/null +++ b/cookbooks/travis_ci_windows_2019/.rspec @@ -0,0 +1,4 @@ +--color +--format documentation +--require support +--order rand diff --git a/cookbooks/travis_ci_windows_2019/README.md b/cookbooks/travis_ci_windows_2019/README.md new file mode 100644 index 000000000..a5312d7b8 --- /dev/null +++ b/cookbooks/travis_ci_windows_2019/README.md @@ -0,0 +1,4 @@ +travis_ci_windows_2019 Cookbook +======================== + +A wrapper cookbook for the Windows 2019 CI image. diff --git a/cookbooks/travis_ci_windows_2019/attributes/default.rb b/cookbooks/travis_ci_windows_2019/attributes/default.rb new file mode 100644 index 000000000..e361aa8bc --- /dev/null +++ b/cookbooks/travis_ci_windows_2019/attributes/default.rb @@ -0,0 +1,70 @@ +# frozen_string_literal: true + +override['travis_java']['default_version'] = '' +override['travis_java']['alternate_versions'] = [] + +override['travis_phpenv']['prerequisite_recipes'] = [] +override['travis_phpbuild']['prerequisite_recipes'] = [] + +override['travis_perlbrew']['perls'] = [] +override['travis_perlbrew']['modules'] = [] +override['travis_perlbrew']['prerequisite_packages'] = [] + +gimme_versions = %w[ + 1.7.4 +] + +override['travis_build_environment']['gimme']['versions'] = gimme_versions +override['travis_build_environment']['gimme']['default_version'] = gimme_versions.max + +override['travis_build_environment']['pythons'] = [] +override['travis_build_environment']['python_aliases'] = {} +override['travis_build_environment']['pip']['packages'] = {} +override['travis_build_environment']['system_python']['pythons'] = [] + +override['travis_build_environment']['nodejs_default'] = '' +override['travis_build_environment']['nodejs_versions'] = [] +override['travis_build_environment']['nodejs_aliases'] = {} +override['travis_build_environment']['nodejs_default_modules'] = [] + +override['travis_system_info']['commands_file'] = \ + '/var/tmp/onion-system-info-commands.yml' + +rubies = %w[ + 2.2.7 + 2.4.1 +] + +override['travis_build_environment']['default_ruby'] = rubies.max +override['travis_build_environment']['rubies'] = rubies +override['travis_build_environment']['php_versions'] = [] +override['travis_build_environment']['php_aliases'] = {} +override['travis_build_environment']['otp_releases'] = [] +override['travis_build_environment']['elixir_versions'] = [] +override['travis_build_environment']['default_elixir_version'] = '' +override['travis_build_environment']['hhvm_enabled'] = false +override['travis_build_environment']['update_hostname'] = false +override['travis_build_environment']['use_tmpfs_for_builds'] = false +override['travis_build_environment']['install_gometalinter_tools'] = false +override['travis_build_environment']['mercurial_install_type'] = 'pip' +override['travis_build_environment']['mercurial_version'] = '4.2.2~trusty1' + +override['travis_packer_templates']['job_board']['stack'] = 'onion' +override['travis_packer_templates']['job_board']['features'] = %w[ + basic + disabled-ipv6 + docker + docker-compose + go-toolchain + perl_interpreter + perlbrew + python_interpreter + ruby_interpreter +] +override['travis_packer_templates']['job_board']['languages'] = %w[ + __windows_1803__ + bash + minimal + sh + shell +] diff --git a/cookbooks/travis_ci_windows_2019/metadata.rb b/cookbooks/travis_ci_windows_2019/metadata.rb new file mode 100644 index 000000000..a5edf0be9 --- /dev/null +++ b/cookbooks/travis_ci_windows_2019/metadata.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +name 'travis_ci_windows_2019' +maintainer 'Travis CI GmbH' +maintainer_email 'contact+travis-ci-windows-cookbook@travis-ci.org' +license 'MIT' +description 'Installs/Configures travis_ci_windows_2019' +long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) +version '0.1.0' +source_url 'https://github.com/travis-ci/packer-templates' +issues_url 'https://github.com/travis-ci/packer-templates/issues' + +# TODO: wat +## depends 'travis_build_environment' +## depends 'travis_docker' +## depends 'travis_java' +## depends 'travis_packer_templates' +## depends 'travis_perlbrew' +## depends 'travis_postgresql' +## depends 'travis_system_info' diff --git a/cookbooks/travis_ci_windows_2019/recipes/default.rb b/cookbooks/travis_ci_windows_2019/recipes/default.rb new file mode 100644 index 000000000..0187fa498 --- /dev/null +++ b/cookbooks/travis_ci_windows_2019/recipes/default.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +# Cookbook Name:: travis_ci_windows_2019 +# Recipe:: default +# +# Copyright 2017, Travis CI GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +directory 'c:\\travis' diff --git a/packer-assets/windows-server-2019-packages.txt b/packer-assets/windows-server-2019-packages.txt new file mode 100644 index 000000000..6be622247 --- /dev/null +++ b/packer-assets/windows-server-2019-packages.txt @@ -0,0 +1,21 @@ +7zip.install +cmake.install --installargs 'ADD_CMAKE_TO_PATH=System' +curl +git.install +gnuwin32-make.portable +hashdeep +jq +llvm +mingw +rsync +ruby +wget +winscp +visualstudio2017buildtools --package-parameters "--quiet --wait --norestart --locale en-US --allWorkloads --includeRecommended --includeOptional --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Component.VC.ATL --add Microsoft.VisualStudio.Component.VC.ATLMFC" +visualstudio2017-workload-netcorebuildtools +visualstudio2017-workload-vctools +visualstudio2017-workload-webbuildtools +windows-sdk-10.1 +microsoft-build-tools +vcredist2017 +wsl diff --git a/packer-assets/windows-server-2019-purge.txt b/packer-assets/windows-server-2019-purge.txt new file mode 100644 index 000000000..e69de29bb From 1d636b1a98fd18eee65283aecfe739a683c7d34b Mon Sep 17 00:00:00 2001 From: Josh Kalderimis Date: Fri, 31 May 2019 23:32:24 +0100 Subject: [PATCH 2/4] use source image family --- ci-windows-1803.yml | 2 +- ci-windows-2019.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ci-windows-1803.yml b/ci-windows-1803.yml index 112c96e9a..2b9c75395 100644 --- a/ci-windows-1803.yml +++ b/ci-windows-1803.yml @@ -20,7 +20,7 @@ builders: image_description: Travis CI Windows 1803 Core (for containers) account_file: "{{ user `gce_account_file` }}" project_id: "{{ user `gce_project_id` }}" - source_image: "{{ user `gce_image_family` }}" + source_image_family: "{{ user `gce_image_family` }}" zone: us-central1-a image_name: "{{ user `image_name` }}" machine_type: n1-standard-4 diff --git a/ci-windows-2019.yml b/ci-windows-2019.yml index 7b3988684..a6d14d419 100644 --- a/ci-windows-2019.yml +++ b/ci-windows-2019.yml @@ -20,7 +20,7 @@ builders: image_description: Travis CI Windows 2019 (for containers) account_file: "{{ user `gce_account_file` }}" project_id: "{{ user `gce_project_id` }}" - source_image: "{{ user `gce_image_family` }}" + source_image_family: "{{ user `gce_image_family` }}" zone: us-central1-a image_name: "{{ user `image_name` }}" machine_type: n1-standard-4 From 9b8ca7da5f56b28bfd4ee9f388917f4475b69d72 Mon Sep 17 00:00:00 2001 From: Josh Kalderimis Date: Mon, 3 Jun 2019 12:04:11 +0200 Subject: [PATCH 3/4] update packages for windows 2019 --- packer-assets/windows-server-2019-packages.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packer-assets/windows-server-2019-packages.txt b/packer-assets/windows-server-2019-packages.txt index 6be622247..39694da7e 100644 --- a/packer-assets/windows-server-2019-packages.txt +++ b/packer-assets/windows-server-2019-packages.txt @@ -15,7 +15,6 @@ visualstudio2017buildtools --package-parameters "--quiet --wait --norestart --lo visualstudio2017-workload-netcorebuildtools visualstudio2017-workload-vctools visualstudio2017-workload-webbuildtools -windows-sdk-10.1 -microsoft-build-tools +windows-sdk-10-version-1903-all vcredist2017 wsl From 980790e4e462747e4a5ac15e862babf0548cdc3e Mon Sep 17 00:00:00 2001 From: Josh Kalderimis Date: Wed, 5 Jun 2019 16:10:00 -0400 Subject: [PATCH 4/4] remove user var gce_image_family --- ci-windows-1803.yml | 3 +-- ci-windows-2019.yml | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/ci-windows-1803.yml b/ci-windows-1803.yml index 2b9c75395..a5a64edcb 100644 --- a/ci-windows-1803.yml +++ b/ci-windows-1803.yml @@ -3,7 +3,6 @@ description: Travis CI Windows 1803 Core (for containers) build env template variables: gce_account_file: "{{ env `GCE_ACCOUNT_FILE` }}" gce_project_id: "{{ env `GCE_PROJECT_ID` }}" - gce_image_family: "windows-1803-core-for-containers" image_name: travis-ci-windows-1803-containers-{{ timestamp }}-<%= git_desc %> dist_name: 1803-containers travis_cookbooks_branch: "{{ env `TRAVIS_COOKBOOKS_BRANCH` }}" @@ -20,7 +19,7 @@ builders: image_description: Travis CI Windows 1803 Core (for containers) account_file: "{{ user `gce_account_file` }}" project_id: "{{ user `gce_project_id` }}" - source_image_family: "{{ user `gce_image_family` }}" + source_image_family: windows-1803-core-for-containers zone: us-central1-a image_name: "{{ user `image_name` }}" machine_type: n1-standard-4 diff --git a/ci-windows-2019.yml b/ci-windows-2019.yml index a6d14d419..3c147dacc 100644 --- a/ci-windows-2019.yml +++ b/ci-windows-2019.yml @@ -3,7 +3,6 @@ description: Travis CI Windows 2019 (for containers) build env template variables: gce_account_file: "{{ env `GCE_ACCOUNT_FILE` }}" gce_project_id: "{{ env `GCE_PROJECT_ID` }}" - gce_image_family: "windows-2019-for-containers" image_name: travis-ci-windows-2019-containers-{{ timestamp }}-<%= git_desc %> dist_name: 2019-containers travis_cookbooks_branch: "{{ env `TRAVIS_COOKBOOKS_BRANCH` }}" @@ -20,7 +19,7 @@ builders: image_description: Travis CI Windows 2019 (for containers) account_file: "{{ user `gce_account_file` }}" project_id: "{{ user `gce_project_id` }}" - source_image_family: "{{ user `gce_image_family` }}" + source_image_family: windows-2019-for-containers zone: us-central1-a image_name: "{{ user `image_name` }}" machine_type: n1-standard-4