Gitlab CI 将文件从 repo 复制到管道并将其解压缩到路径

Gitlab CI copy file from repo to pipeline and extract it to path

我有一个文件夹文件 trivy-offline.db.tgz,我想将其复制并解压到 docker,而 CI 是 运行。

project directory 是 - /builds/test/eval-trivy-3

gitlab-ci.yml

 container_scanning:
  stage: test
  image:
    name: $CI_REGISTRY/devops/trivy/trivy:0.20.1
    entrypoint: [""]
  variables:
    GIT_STRATEGY: none
    TRIVY_USERNAME: "$CI_REGISTRY_USER"
    TRIVY_PASSWORD: "$CI_REGISTRY_PASSWORD"
    TRIVY_AUTH_URL: "$CI_REGISTRY"
    FULL_IMAGE_NAME: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
  script:
    - echo "the project directory is - $CI_PROJECT_DIR"
    - trivy --version
    - time trivy image --clear-cache
    - <cp file to this docker>
    - <extract file to path>

首先要解决的问题是,您正在使用的 trivy 容器中有哪些工具可用,里面是否有 tar 可用。

通过tar提取的命令非常简单tar -xzf <file>

GitLab CI 通常已经检查了您的存储库,因此文件应该已经就位,无需特别注意。

变体 1:tar 可用

 container_scanning:
  # ...
  script:
    - echo "the project directory is - $CI_PROJECT_DIR"
    - trivy --version
    - time trivy image --clear-cache
    - tar -xzf trivy-offline.db.tgz

变体 2:tar 不在图像中

您可以对包含 tar 的任何其他图像进行预处理,然后用那个

提取它
 extract-trivy-db:
  # ...
  script:
    - tar -xzf trivy-offline.db.tgz
  artifacts:
    paths:
      - trivy-offline.db

 container_scanning:
  # ...
  needs: ["extract-trivy-db"]
  script:
    - echo "the project directory is - $CI_PROJECT_DIR"
    - trivy --version
    - time trivy image --clear-cache