Docker sudo:未找到命令| gitlab ci

Docker sudo:未找到命令| gitlab ci,docker,gitlab-ci,sudo,Docker,Gitlab Ci,Sudo,我将gitlab ci用于我的简单项目 一切正常,我的runner正在本地机器(ubuntu18-04)上运行,我用simple.gitlab-ci.yml对它进行了测试 现在我尝试使用以下yml: image: ubuntu:18.04 build-job: stage: build script: - echo "Hello, $GITLAB_USER_LOGIN!" - sudo apt-get update 但我得到了以下错误: /bin

我将gitlab ci用于我的简单项目

一切正常,我的runner正在本地机器(ubuntu18-04)上运行,我用simple.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?

您不必担心更新Gitlab CI管道作业中使用的Ubuntu映像,因为docker容器在作业完成时被销毁。此外,docker图像经常更新。如果你看一下ubuntu:18.04的docker hub页面,它是在两天前更新的:

因为您正在这里进行更新,所以我假设接下来您可能需要安装一些软件包。这样做是可能的,但不建议这样做,因为您运行的每个管道都必须安装这些软件包,这确实会降低它们的速度。相反,您可以基于父映像创建自定义docker映像,并以这种方式对其进行自定义。然后,您可以将docker映像上载到docker hub,Gitlab的注册表(如果使用自托管Gitlab,则必须由管理员启用),或者在所有Gitlab运行程序上构建

下面是一个愚蠢的例子:

# .../custom_ubuntu:18.04/Dockerfile
FROM ubuntu:18.04
RUN apt-get install git
接下来,您可以构建映像:
docker build/path/to/directory/that/has/dockerfile
,标记它以便您可以在管道配置文件中引用它:
docker tag aaaaaaaa fffff 59 my\u org/custom\u 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中使用自定义图像的更多信息:

为什么需要
sudo
?一个典型的开箱即用的以Linux发行版为中心的Docker上游容器已经以root用户身份调用了它的进程,因此
sudo
没有什么可做的。(戴上我的信息安全帽,我也非常非常讨厌看到容器遵循这种模式——当软件在构建时升级到当前发生的任何事件时,您是否无法保证在任何给定的运行中哪些包是活动的,并且还需要确保重新构建容器与er相关的安全更新;Nix方法,即在计算运行步骤时解析各个版本——因此此信息被存储并可供以后查找——更有意义)。“您不必担心更新Ubuntu映像”您绝对应该这样做,因为您可能需要的大多数软件包都不是默认安装的。。。