【问题标题】:"Unable to locate package git" when running GitLab CI/CD pipeline运行 GitLab CI/CD 管道时“无法找到包 git”
【发布时间】:2021-02-02 07:53:28
【问题描述】:

我正在尝试使用以下 .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

【问题讨论】:

  • 您是否有可能使用公司代理来重写 Ubuntu APT 存储库的 DNS 查询?
  • @PierreB。这是在 GitLab 的 CI/CD 管道上运行的,可能吗?重写 DNS 查询?我不确定。

标签: docker gitlab gitlab-ci ros


【解决方案1】:

.gitlab-ci.yml 中安装软件包甚至运行更新命令通常违反 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

您也可以在那里安装/配置您需要做的任何其他事情,然后在您完成构建映像后:

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,在您的管道中使用 docker 映像的一般文档在此处:https://docs.gitlab.com/ee/ci/docker/using_docker_images.html

【讨论】:

  • 非常感谢!这很有帮助。感谢您阐明最佳实践 --- 否则我永远不会知道。
猜你喜欢
  • 2022-08-11
  • 2020-07-23
  • 2021-01-23
  • 2021-03-21
  • 1970-01-01
  • 2021-09-13
  • 2021-11-28
  • 2022-06-17
  • 2019-03-03
相关资源
最近更新 更多