【问题标题】:GitLab CI docker build - docker: not found - exit code 127GitLab CI docker build - docker:未找到 - 退出代码 127
【发布时间】:2021-06-10 08:13:14
【问题描述】:

我正在尝试为一个简单的 java/maven 项目创建一个 CI/CD 管道。 我正在使用的跑步者是 docker 跑步者。
我正在使用dockerfile 创建一个安装 maven/java/etc 的容器。在这个容器中应该测试程序。

很抱歉这个问题,但我是 GitLab 中 CI/CD 管道的新手。

GitHub 运行良好看看:https://github.com/ni920/CICD-Test

谢谢


这是 CI 日志

...
Executing "step_script" stage of the job script
 $ docker build --build-arg JAVA_VERSION=openjdk7
 /bin/sh: eval: line 95: docker: not found
Cleaning up file based variables
 ERROR: Job failed: exit code 127

那是.gitlab-ci.yml


stages:
  - java7
# - java11
# - deploy


java7:
  stage: java7
  script:
      - docker build --build-arg JAVA_VERSION=openjdk7
 # tags:
 #   - docker

#java11:
#  stage: java11
#  script:
#    - docker build --build-arg JAVA_VERSION=openjdk11
#  tags:
#    - docker

那是dockerfile

# Pull base image.
FROM alpine as build

ARG MAVEN_VERSION=3.6.1
ARG USER_HOME_DIR="/root"
ARG JAVA_VERSION=openjdk7
ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries

ENV HTTP_PROXY=#comment
ENV HTTPS_PROXY=#comment

# Install Java.
RUN apk --update --no-cache add JAVA_VERSION curl

RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
 && curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
 && tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
 && rm -f /tmp/apache-maven.tar.gz \
 && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn

ENV MAVEN_HOME /usr/share/maven
ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2"

# Define working directory.
WORKDIR /data

# Define commonly used JAVA_HOME variable
ENV JAVA_HOME /usr/lib/jvm/default-jvm/

# Define default command.
CMD ["mvn", "--version"]



【问题讨论】:

    标签: java docker maven dockerfile gitlab-ci


    【解决方案1】:

    使用 Docker executor 运行您的管道意味着您的作业将在 Docker 容器 中运行,但并不意味着您将能够执行docker 命令。

    如果您需要在 GitLab CI job 中运行 docker 命令(阅读“在容器内”),您将需要 Docker-in-Docker(通常缩写为 DinD)。这本身就是一个庞大的话题,但您可以从 GitLab CI 的文档开始:Use Docker to build Docker images


    我总是使用 DinD 并在我的 gitlab-ci.yml 中进行了最小设置。

    默认使用docker 图像:

    image: docker:19.03.13
    

    TLS 证书定义一个默认变量:

    variables:
        DOCKER_TLS_CERTDIR: "/certs"
    

    然后使用 docker 镜像作为服务来启用 DinD

    services:
        -   name: docker:19.03.13-dind
            alias: docker
    

    我写了 a few posts 关于在 GitLab CI 上使用 Docker-in-Docker 的文章,您可能会觉得这很有用,但我仍然建议您广泛阅读 GitLab 的文档,然后再阅读它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      • 2018-12-14
      • 2018-10-09
      • 2021-11-14
      • 2020-01-08
      • 2019-08-05
      • 2022-09-28
      相关资源
      最近更新 更多