Spack GitLab CI Pipeline报错:环境YAML无gitlab-ci段的排查求助
参考Spack的GitLab CI流水线示例配置.gitlab-ci.yml和spack.yaml,对script部分做了如下修改:
script: - spack env create ENV - spack env activate --without-view ENV
同时注释了docker标签,但运行流水线时出现错误:
Error: Environment yaml does not have "gitlab-ci" section
尝试将spack.yaml中的ci:段重命名为gitlab-ci:,错误依然存在。附上完整配置文件,寻求排查方向。
完整配置文件
.gitlab-ci.yml
stages: [generate, build] variables: SPACK_REPO: https://github.com/scottwittenburg/spack.git SPACK_REF: pipelines-reproducible-builds generate-pipeline: stage: generate tags: # - docker image: name: ghcr.io/scottwittenburg/ecpe4s-ubuntu18.04-runner-x86_64:2020-09-01 entrypoint: [""] before_script: - git clone ${SPACK_REPO} - pushd spack && git checkout ${SPACK_REF} && popd - . "./spack/share/spack/setup-env.sh" script: - spack env create ENV - spack env activate --without-view ENV - spack -d ci generate --artifacts-root "${CI_PROJECT_DIR}/jobs_scratch_dir" --output-file "${CI_PROJECT_DIR}/jobs_scratch_dir/pipeline.yml" artifacts: paths: - "${CI_PROJECT_DIR}/jobs_scratch_dir" build-jobs: stage: build trigger: include: - artifact: "jobs_scratch_dir/pipeline.yml" job: generate-pipeline strategy: depend
spack.yaml
spack: view: false concretizer: unify: false definitions: - pkgs: - zlib - bzip2 - arch: - '%gcc@7.5.0 arch=linux-ubuntu18.04-x86_64' specs: - matrix: - - $pkgs - - $arch mirrors: { "mirror": "s3://spack-public/mirror" } ci: enable-artifacts-buildcache: True rebuild-index: False pipeline-gen: - any-job: before_script: - git clone ${SPACK_REPO} - pushd spack && git checkout ${SPACK_CHECKOUT_VERSION} && popd - . "./spack/share/spack/setup-env.sh" - build-job: # tags: [docker] image: name: ghcr.io/scottwittenburg/ecpe4s-ubuntu18.04-runner-x86_64:2020-09-01 entrypoint: [""]
确保环境加载指定的
spack.yaml
当前spack env create ENV创建的是空白环境,不会自动读取当前目录的配置文件。需改成spack env create ENV ./spack.yaml,明确指定用当前目录的spack.yaml创建环境,激活后才能读取到配置里的ci/gitlab-ci段。验证Spack分支的配置字段要求
你使用的pipelines-reproducible-builds是实验性分支,配置字段可能和稳定版有差异:- 若该分支要求用
gitlab-ci字段,需确保spack.yaml里的ci:改成gitlab-ci:,同时创建环境时指定配置文件; - 若分支仍用
ci:字段,问题大概率出在环境没加载到配置文件。
- 若该分支要求用
添加调试命令确认配置加载情况
在script中加入调试命令,检查环境是否正确读取配置:- spack env create ENV ./spack.yaml - spack env activate --without-view ENV - spack config get # 查看当前环境的完整配置,确认是否包含ci/gitlab-ci段如果输出里没有对应配置,说明环境没加载到
spack.yaml,要排查当前目录路径、文件是否存在等问题。尝试直接指定配置文件生成流水线
跳过环境创建激活步骤,直接用--env-file参数指定配置文件:spack -d ci generate --env-file ./spack.yaml --artifacts-root "${CI_PROJECT_DIR}/jobs_scratch_dir" --output-file "${CI_PROJECT_DIR}/jobs_scratch_dir/pipeline.yml"避免环境加载环节可能出现的问题。
检查分支的流水线生成逻辑
查看pipelines-reproducible-builds分支的源码,确认ci generate命令期望的配置字段名称(是ci还是gitlab-ci),以及是否需要特定的配置结构。
内容的提问来源于stack exchange,提问作者iris

