Try pre-caching ISO files

Since the builds themselves get run in a big parallel morass of
nonsense, this causes cache clobbering all over. So now I move the
downloading to the pre-trigger stage and hopefully we can use
the pre-download step to cache things properly. Hopefully this will also
prevent issues where dynamically generated download files are missing
for later runs.
This commit is contained in:
Greg Hellings
2024-04-10 12:56:52 -05:00
parent 0c738ffe8f
commit ea51188897
7 changed files with 65 additions and 23 deletions
+1
View File
@@ -18,6 +18,7 @@ __pycache__
*.pyc *.pyc
*.pyo *.pyo
packer_cache packer_cache
cache
.venv .venv
venv venv
+4 -3
View File
@@ -11,8 +11,9 @@ stages:
- sources/build.pkr.hcl - sources/build.pkr.hcl
paths: paths:
- ./packer_config/ - ./packer_config/
- paths: - key: isofiles
- packer_cache/*.iso paths:
- cache/*.iso
rules: rules:
- if: $CI_COMMIT_TAG - if: $CI_COMMIT_TAG
variables: variables:
@@ -31,7 +32,7 @@ stages:
- ${tag} - ${tag}
variables: &variables variables: &variables
PACKER_CONFIG_DIR: ./packer_config/ PACKER_CONFIG_DIR: ./packer_config/
PACKER_CACHE_DIR: ./packer_cache/ PACKER_CACHE_DIR: ./cache/
PACKER_LOG: 1 PACKER_LOG: 1
COMMAND: > COMMAND: >
packer build ${only} packer build ${only}
+56 -20
View File
@@ -1,8 +1,13 @@
stages: stages:
- generate - generate
- lint - lint
- cache
- trigger - trigger
variables:
PACKER_CONFIG_DIR: ./packer_config/
PACKER_CACHE_DIR: ./cache/
generate: generate:
stage: generate stage: generate
artifacts: artifacts:
@@ -13,26 +18,6 @@ generate:
"./${vars}" "./${vars}"
done done
validate:
stage: lint
needs:
- generate
cache:
paths:
- /var/lib/gitlab-runner/.config/packer/plugins/
script: |-
set -exo pipefail
packer init sources
for vars in $(find distros/ -name '*.pkrvars.hcl'); do
packer validate -except=upload -var-file=${vars} sources/
done
shellcheck:
stage: lint
script: |-
shellcheck --version
shellcheck $(find . -name '*.sh')
distros: distros:
stage: generate stage: generate
image: $CI_REGISTRY_DIRECT/greg/ci-images/fedora:latest image: $CI_REGISTRY_DIRECT/greg/ci-images/fedora:latest
@@ -45,6 +30,57 @@ distros:
xonsh ./build.xsh -a --list xonsh ./build.xsh -a --list
echo "BUILD=$(date +'%Y.%m.%d.%H')" >> build.env echo "BUILD=$(date +'%Y.%m.%d.%H')" >> build.env
validate:
stage: lint
needs:
- generate
cache:
- key:
files:
- sources/build.pkr.hcl
paths:
- ./packer_config/
script: |-
set -exo pipefail
packer init sources
for vars in $(find distros/ -name '*.pkrvars.hcl'); do
packer validate -except=upload -var-file=${vars} sources/
done
shellcheck:
stage: lint
script: |-
shellcheck --version
shellcheck $(find . -name '*.sh')
# Downloads all the ISO files so that we have a single cache with all
# of them present. This prevents a race condition where some of the
# files were being downloaded multiple times due to parallel jobs, and
# others were disappearing (e.g. daily builds for Rawhide) before we
# could get to them
downloads:
stage: cache
image: $CI_REGISTRY_DIRECT/greg/ci-images/fedora:latest
cache:
- key: isofiles
paths:
- cache/*.iso
- key:
files:
- sources/build.pkr.hcl
paths:
- ./packer_config/
script:
- set -exo pipefail
- packer init sources
- |-
for vars in $(find distros/ -name '*.pkrvars.hcl'); do
file=$(echo var.iso.url | packer console -var-file=${vars} -config-type=hcl2 sources/)
pushd cache
curl -O "${file}"
popd
done
trigger: trigger:
stage: trigger stage: trigger
trigger: trigger:
+1
View File
@@ -1,5 +1,6 @@
source "hyperv-iso" "amd64" { source "hyperv-iso" "amd64" {
iso_url = var.iso.url iso_url = var.iso.url
iso_target_path = "cache/${basename(var.iso.url)}"
iso_checksum = var.iso.checksum iso_checksum = var.iso.checksum
output_directory = "output/hyperv/${local.name}" output_directory = "output/hyperv/${local.name}"
+1
View File
@@ -5,6 +5,7 @@ variable "qemu_accelerator" {
source "qemu" "amd64" { source "qemu" "amd64" {
iso_url = var.iso.url iso_url = var.iso.url
iso_target_path = "cache/${basename(var.iso.url)}"
iso_checksum = var.iso.checksum iso_checksum = var.iso.checksum
output_directory = "output/libvirt/${local.name}" output_directory = "output/libvirt/${local.name}"
+1
View File
@@ -1,5 +1,6 @@
source "virtualbox-iso" "amd64" { source "virtualbox-iso" "amd64" {
iso_url = var.iso.url iso_url = var.iso.url
iso_target_path = "cache/${basename(var.iso.url)}"
iso_checksum = var.iso.checksum iso_checksum = var.iso.checksum
output_directory = "output/virtualbox/${local.name}" output_directory = "output/virtualbox/${local.name}"
+1
View File
@@ -1,5 +1,6 @@
source "vmware-iso" "amd64" { source "vmware-iso" "amd64" {
iso_url = var.iso.url iso_url = var.iso.url
iso_target_path = "cache/${basename(var.iso.url)}"
iso_checksum = var.iso.checksum iso_checksum = var.iso.checksum
output_directory = "output/vmware/${local.name}" output_directory = "output/vmware/${local.name}"