首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在GitLab CI/CD中集成构建项目的各种服务?

如何在GitLab CI/CD中集成构建项目的各种服务?
EN

Stack Overflow用户
提问于 2022-06-16 10:28:37
回答 2查看 335关注 0票数 0

我有一个项目,需要npm和分级的建设,和码头建设和推动形象。

起初,我想我应该用gradle和npm设置来创建我自己的ubuntu映像,但是我发现这不是对接映像的目的。

因此,我希望将正式的Gradle和节点映像作为一个服务运行,这样我的脚本就可以调用这些命令,但由于某种原因,这种情况并没有发生。

我的..gitlab ci.yml:

代码语言:javascript
复制
  variables:
  IMAGE_NAME: my.registry.production/project
  IMAGE_TAG: $CI_COMMIT_BRANCH
  GIT_SUBMODULE_STRATEGY: recursive

stages:
  - build
  - deploy

build_project:
  stage: build
  image: ubuntu:jammy
  services:
    - name: node:12.20
      alias: npm
    - name: gradle:6.3.0-jre8
      alias: gradle
  before_script:
    - git submodule init && git submodule update --remote --recursive
  script:
    - cd project-server && npm install && gradle clean build -Pprod -Pwar -x test -x integrationTest

deploy_image:
  stage: deploy
  image: docker:20.10.17
  services:
    - name: docker:20.10.17-dind
      alias: docker
  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_TLS_CERTDIR: ""
    DOCKER_DRIVER: overlay2
  script:
    - docker login -u $REGISTRY_USER -p $REGISTRY_PASSWORD my.registry.production
    - docker build -t $IMAGE_NAME:$IMAGE_TAG .
    - docker push $IMAGE_NAME:$IMAGE_TAG

如果有人知道如何解决这个问题,我会非常感激,因为我是一个新手DevOps。

编辑1:安装了Gradle和Node的定制映像的Dockerfile。

代码语言:javascript
复制
FROM ubuntu:jammy

LABEL key=DevOps

SHELL ["/bin/bash", "--login", "-i", "-c"]

RUN apt update && apt upgrade -y && apt install curl -y 

RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

RUN source /root/.bashrc && nvm install 12.14.1

RUN nvm install 12.20.0

RUN apt install zip unzip

RUN curl -s "https://get.sdkman.io" | bash

RUN source "$HOME/.sdkman/bin/sdkman-init.sh"

RUN sdk install java 8.0.302-open

RUN sdk install gradle 3.4.1

SHELL ["/bin/bash", "--login", "-c"]

CMD [ "bin/bash" ]

在我运行它之后,它说在$PATH中找不到npm,我也尝试了,但是在path中也没有找到它们。

我不知道为什么,因为我安装了他们,因为你可以从Dockerfile中得知。

EN

回答 2

Stack Overflow用户

发布于 2022-06-16 13:47:07

据我所知,码头形象等于一个构建。因此,如果您有多个服务,则需要将每个服务构建到docker映像中,然后可以将所有图像封装到docker-compose.yml文件中。

我认为你可以做到以下几点:

  1. 将npm项目构建为坞映像
  2. ,将Gradle项目构建为坞映像
  3. ,编写docker-compose.yml文件并将这两个图像都放入。

一旦完成了它,管道就会调用docker-compose.yml文件。

我希望这会有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2022-06-18 09:12:36

考虑一些基于CI/CD管道中部署的基本概念的建议:

  1. 移除服务关键字。参考GitLab关于gitlab-ci.yaml文件中的gitlab-ci.yaml关键字不用于什么的官方文档。该特性用于向作业运行时(如数据库)提供网络可访问服务项目使用npm作为依赖关系管理系统,Gradle是一种构建工具。这两款软件都非常适合在GitLab管道作业中容器运行时的主机操作系统上运行。您需要这些工具来组装一些构建工件,因为您的代码已在Runner.
  2. Think中下载到的同一台主机上,其大小约为build_project作业中基本映像的总体大小,并考虑通过网络将映像下载到运行程序的时间将如何影响您的作业和整个管道持续时间。如果可以通过将构建依赖关系分解为自定义Dockerfile来提高性能,则可以这样做。如果映像太大,则使用script关键字块中的shell命令在作业运行时下载它们。这两者都有优缺点。
  3. 将shell脚本分解为一行命令,以便更容易地排除脚本中的故障。您将能够在作业日志中看到返回非零退出代码的命令的行号:

...脚本:- cd项目-服务器- npm安装-分级清洁构建-Pprod -Pwar -x测试-x integrationTest

  1. 建议大部分时间使用Gradle包装器(gradlew),而不是直接使用gradle可执行文件。在您的项目中配置它并将包装器的配置文件检查到您的版本控制系统中,这将简化您的构建依赖性:https://docs.gradle.org/current/userguide/gradle_wrapper.html
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72644387

复制
相关文章

相似问题

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