sudo:命令未找到 | GitLab-CI

4

我在我的简单项目中使用gitlab-ci。

一切都好,我的runner在我的本地机器(ubuntu18-04)上工作,并且我使用简单的.gitlab-ci.yml进行了测试。

现在我尝试使用以下yml:

image: ubuntu:18.04 

build-job:
  stage: build
  script:
    - echo "Hello, $GITLAB_USER_LOGIN!"
    - sudo apt-get update

但是我遇到了以下错误:

/bin/bash: line 110: sudo: command not found

我该如何使用sudo呢?


1
为什么你需要使用sudo呢?一个典型的开箱即用的上游Linux发行版中心的Docker容器已经作为root用户调用其进程,所以sudo没有任何作用。 - Charles Duffy
1
带着我的信息安全帽子,我真的非常地讨厌看到容器遵循这种模式——在构建时将软件升级到任何网络资源目前具有的内容时,您无法保证每次运行中哪些包是活动的,并且还需要确保在相关的安全更新后重建您的容器。Nix方法在计算运行步骤时解析单个版本,因此此信息被存储并可供以后查找,更为合理。 - Charles Duffy
1个回答

3

在Gitlab CI pipeline工作完成后,Docker容器会被销毁,因此您不必担心更新Ubuntu镜像。此外,Docker映像经常更新。如果您查看ubuntu:18.04的Docker Hub页面,可以看到它在2天前刚刚更新:https://hub.docker.com/_/ubuntu?tab=tags&page=1&ordering=last_updated

既然您要进行更新,那我假设接下来您可能想安装一些软件包。虽然可以这样做,但不建议这样做,因为运行每个pipeline都必须安装这些软件包,这可能会拖慢速度。相反,您可以基于父映像创建自定义Docker映像,并以这种方式进行自定义。然后,您可以将该Docker映像上传到Docker Hub、Gitlab的注册表(如果使用自托管的Gitlab,则必须由管理员启用)或内置于所有的gitlab-runner中。

以下是一个简单的例子:

# .../custom_ubuntu:18.04/Dockerfile
FROM ubuntu:18.04
RUN apt-get install git

接下来,您可以构建镜像:docker build /path/to/directory/that/has/dockerfile,并为其打标签以便在流水线配置文件中引用:docker tag aaaaafffff59 my_org/custom_ubuntu:18.04。然后,如果需要,可以上传已打标签的镜像:docker push my_org/custom_ubuntu:18.04

在您的.gitlab-ci.yml文件中,引用这个自定义Ubuntu镜像:

image: my_org/custom_ubuntu:18.04 

build-job:
  stage: build
  script:
    - echo "Hello, $GITLAB_USER_LOGIN!"
    - git --version # ensures the package you need is available

您可以在这里阅读有关在 Gitlab CI 中使用自定义镜像的更多信息:https://docs.gitlab.com/charts/advanced/custom-images/

你不应该担心更新Ubuntu镜像,因为大多数你可能需要的软件包都没有默认安装... - Cerin
在这种情况下,您可以自由地创建一个基于Ubuntu的自定义映像,并安装所需的更新和任何新软件包,然后使用该自定义映像。从时间损失的角度来看,不应在运行中的流水线中执行更新和软件包安装。 - Adam Marshall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接