"Unable to locate package git" 当 运行 GitLab CI/CD 管道

"Unable to locate package git" when running GitLab CI/CD pipeline

我正在尝试使用以下 .gitlab-ci.yml 文件设置 GitLab CI/CD 管道:

stages:
  - test

image: "ros:foxy-ros-base-focal"

before_script:
  - apt-get -y update && apt-get install -y \
    git wget qt5-default \
    python3-osrf-pycommon \
    python3-catkin-tools \
    python3-rosdep \
    python3-vcstool \
    python3-pip \
    python3-colcon-common-extensions \
    apt-utils
  - rm -rf /var/lib/apt/lists/*
  - /bin/bash -c "source /opt/ros/${ROS_DISTRO}/setup.bash; colcon build"
  - echo "source /root/dev_ws/install/setup.bash" >> /opt/ros/${ROS_DISTRO}/setup.bash

test_a:
  stage: test
  script:
    - pip3 install pytest
    - python -m pytest test_utils.py -vv -s

我从 ROS2 Foxy Base Focal Docker 图像开始。然而,尽管 运行 apt-get update,我仍然找不到很多包,包括 git 以及其他几个 ROS2 包。完整日志在这里:

Running with gitlab-runner 13.8.0 (775dd39d)
  on docker-auto-scale fa6cab46
Preparing the "docker+machine" executor
00:27
Using Docker executor with image ros:foxy-ros-base-focal ...
Pulling docker image ros:foxy-ros-base-focal ...
Using docker image sha256:59cf2af10ce4181bf4effbc683375f5e201bfe072c808c75fb3ee903b98265b9 for ros:foxy-ros-base-focal with digest ros@sha256:4f924ff4fdee6b7c999ad6bc013741bdf8430466c7a27842ac6255255ce9ae66 ...
Preparing environment
00:02
Running on runner-fa6cab46-project-23977848-concurrent-0 via runner-fa6cab46-srm-1611897044-53c1946d...
Getting source from Git repository
00:02
$ eval "$CI_PRE_CLONE_SCRIPT"
Fetching changes with git depth set to 50...
Initialized empty Git repository in /builds/imda_dsl/vama-2/scene-understanding/scene-understanding-manager/.git/
Created fresh repository.
Checking out fc385931 as dev...
Skipping Git submodules setup
Executing "step_script" stage of the job script
00:05
$ apt-get -y update && apt-get install -y \ git wget qt5-default \ python3-osrf-pycommon \ python3-catkin-tools \ python3-rosdep \ python3-vcstool \ python3-pip \ python3-colcon-common-extensions \ apt-utils
Get:1 http://packages.ros.org/ros2/ubuntu focal InRelease [4670 B]
Get:2 http://archive.ubuntu.com/ubuntu focal InRelease [265 kB]
Get:3 http://security.ubuntu.com/ubuntu focal-security InRelease [109 kB]
Get:4 http://packages.ros.org/ros2/ubuntu focal/main amd64 Packages [451 kB]
Get:5 http://archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
Get:6 http://security.ubuntu.com/ubuntu focal-security/restricted amd64 Packages [161 kB]
Get:7 http://archive.ubuntu.com/ubuntu focal-backports InRelease [101 kB]
Get:8 http://archive.ubuntu.com/ubuntu focal/multiverse amd64 Packages [177 kB]
Get:9 http://archive.ubuntu.com/ubuntu focal/universe amd64 Packages [11.3 MB]
Get:10 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages [598 kB]
Get:11 http://security.ubuntu.com/ubuntu focal-security/universe amd64 Packages [659 kB]
Get:12 http://security.ubuntu.com/ubuntu focal-security/multiverse amd64 Packages [13.3 kB]
Get:13 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages [1275 kB]
Get:14 http://archive.ubuntu.com/ubuntu focal/restricted amd64 Packages [33.4 kB]
Get:15 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [1003 kB]
Get:16 http://archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 Packages [21.1 kB]
Get:17 http://archive.ubuntu.com/ubuntu focal-updates/restricted amd64 Packages [194 kB]
Get:18 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [920 kB]
Get:19 http://archive.ubuntu.com/ubuntu focal-backports/universe amd64 Packages [4301 B]
Fetched 17.4 MB in 2s (7001 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
E: Unable to locate package  git
E: Unable to locate package  python3-osrf-pycommon
E: Unable to locate package  python3-catkin-tools
E: Unable to locate package  python3-rosdep
E: Unable to locate package  python3-vcstool
E: Unable to locate package  python3-pip
E: Unable to locate package  python3-colcon-common-extensions
E: Unable to locate package  apt-utils
Cleaning up file based variables
00:01
ERROR: Job failed: exit code 1

在您的 .gitlab-ci.yml 中安装包甚至 运行ning 更新命令通常违反 CI/CD 容器的最佳实践,因为 运行 的每个作业都会必须做同样的事情,因为你 运行 更多的管道会花费很多时间。如果找不到包含所需包的现有 Docker 图像(例如,python3 和 git),您可以创建自己的图像。如果您需要从作业 ros:foxy-ros-base-focal 扩展图像,请创建一个包含以下内容的 Dockerfile 文件:

FROM ros:foxy-ros-base-focal
MAINTAINER your name "your email"
RUN apt-get update -yqq
RUN apt-get install -yqq git

你也可以install/configure在那里做任何你需要做的事情,然后当你完成构建图像时:

docker build /path/to/dir-with-dockerfile -t tagname:version

构建完成后,您可以使用 docker images 验证标签是否正确,然后您可以将其推送到注册表(docker hub,gitlab 的注册表,如果启用,私人注册表等)与:

docker login my.hub.example.com

docker push my.hub.example.com/tagname:version

然后在您的 .gitlab-ci.yml 文件中,您可以在作业中使用 tagname:version 图片:

stages:
  - test

image: "tagname:version"
...

如果您必须授权才能使用您的注册表,则必须在此处查看文档 https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#define-an-image-from-a-private-container-registry, and the general docs for using docker images in your pipelines is here: https://docs.gitlab.com/ee/ci/docker/using_docker_images.html