首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >gitlab-ci构建阶段的船工组合失败

gitlab-ci构建阶段的船工组合失败
EN

Stack Overflow用户
提问于 2021-08-30 20:54:02
回答 1查看 564关注 0票数 0

我正在尝试构建gitlab-ci,但其中一个阶段是失败的构建。我被困在了建筑舞台上。它不识别python,我正在尝试安装它,这样我就可以构建映像并通过机器人框架进行测试。

gitlab-ci.yaml

代码语言:javascript
运行
复制
image: python:latest

services:
  - name: docker:dind
    entrypoint: ["env", "-u", "DOCKER_HOST"]
    command: ["dockerd-entrypoint.sh"]

stages:
  - compile
  - build
  - test
  - deploy

variables:
  DOCKER_HOST: tcp://docker:2375
  DOCKER_DRIVER: overlay2
  DOCKER_TLS_CERTDIR: ""
  MOUNT_POINT: /builds/$CI_PROJECT_PATH/mnt
  REPOSITORY_URL: $AWS_ACCOUNT_ID.dkr.ecr.eu-west-2.amazonaws.com/apps_web
  TASK_DEFINITION_NAME: apps_8000
  CLUSTER_NAME: QA-2
  SERVICE_NAME: apps_demo
  ARTIFACT_REPORT_PATH: "app/reports/"

before_script:
  - docker info
  - export IMAGE=$CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME
  - export WEB_IMAGE=$IMAGE:web
  - apk add --no-cache openssh-client bash
  - chmod +x ./setup_env.sh
  - bash ./setup_env.sh
  - docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY

unittests:
  stage: test
  before_script:
    - python -m venv env
    - source env/bin/activate
    - python -m pip install --upgrade pip
    - pip install -r app/app-requirements.txt
  variables:
    DOCKER_IMAGE_TAG: ${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}
  image: ${DOCKER_IMAGE_TAG}
  script:
    - source env/bin/activate
    - python app/manage.py jenkins --enable-coverage
  artifacts:
    reports:
      junit: app/reports/junit.xml
    paths:
      - $ARTIFACT_REPORT_PATH
    expire_in: 30 days
    when: on_success
  only:
    refs:
      - merge_requests
    variables:
      - $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "qa"

migrations:
  stage: compile
  before_script:
    - python -m venv env
    - source env/bin/activate
    - pip install -r app/app-requirements.txt
  script:
    - python app/manage.py makemigrations
  artifacts:
    paths:
      - "app/*/migrations/*.py"
    expire_in: 1 day
  only:
    refs:
      - merge_requests
    variables:
      - $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "qa"

build:
  image:
    name: docker/compose:1.25.4
    entrypoint: [ "" ]
  stage: build
  variables:
    DOCKER_IMAGE_TAG: ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME}
  before_script:
    - apt-get install python3
    - python -m venv env
    - source env/bin/activate
    - python -m pip install --upgrade pip
    - pip install -r app/app-requirements.txt
    - export IMAGE=$CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME
    - export WEB_IMAGE=$IMAGE:web
  script:
    - apk add --no-cache bash
    - chmod +x ./setup_env.sh
    - bash ./setup_env.sh
    - docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY
    - docker pull $IMAGE:web || true
    - docker-compose -f docker-compose.ci.yml build
    - docker push $IMAGE:web
    - docker tag app
    - docker build -t ${DOCKER_IMAGE_TAG} .
  after_script:
    - docker push ${DOCKER_IMAGE_TAG}
    - docker logout
  dependencies:
    - migrations
  only:
    refs:
      - merge_requests
    variables:
      - $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "qa"

deploy_qa:
  stage: deploy
  image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-ecs:latest
  before_script:
    - export IMAGE=$CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME
    - export WEB_IMAGE=$IMAGE:web
    - docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY
  script:
    - echo $IMAGE
    - echo $WEB_IMAGE
    - docker pull $WEB_IMAGE
  environment:
    name: qa
    url: https://app.domain.com
  only:
    refs:
      - merge_requests
    variables:
      - $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "qa"

它由于错误/bin/sh: eval: line 153: apt-get: not found而失败。

EN

回答 1

Stack Overflow用户

发布于 2021-08-31 15:44:45

就像@slauth在他的评论中说的那样,docker/compose映像是基于阿尔卑斯Linux的,它使用的是apk包管理器,而不是apt。但是,您很可能无法使用debian映像,因为您需要docker/compose的功能。在这种情况下,您可以使用apk来安装python,而不是apt,就像在这个作业的script部分安装bash一样:apk add --update --no-cache python3 && ln -sf python3 /usr/bin/python (这来自一个相关的应答here)。

但是,在CI/CD管道中安装和更新包通常是一种不好的做法,因为根据您运行的管道的数量,它会大大减慢您的开发过程。相反,您可以根据您需要的任何映像创建您自己的坞映像,并在那里安装您的包。例如,您可以在那里创建一个基于docker/composer、安装python、bash等的新映像。然后将新映像推送到Docker,Gitlab的内置坞注册中心,或者其他可用的注册表。最后,在.gitlab-ci.yml文件中,只需将docker/compose更改为新映像即可。

有关此部分的更多信息,您可以看到我为类似问题here编写的另一个答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68990210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档