我有一个项目,需要npm和分级的建设,和码头建设和推动形象。
起初,我想我应该用gradle和npm设置来创建我自己的ubuntu映像,但是我发现这不是对接映像的目的。
因此,我希望将正式的Gradle和节点映像作为一个服务运行,这样我的脚本就可以调用这些命令,但由于某种原因,这种情况并没有发生。
我的..gitlab ci.yml:
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。
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中得知。
发布于 2022-06-16 13:47:07
据我所知,码头形象等于一个构建。因此,如果您有多个服务,则需要将每个服务构建到docker映像中,然后可以将所有图像封装到docker-compose.yml文件中。
我认为你可以做到以下几点:
docker-compose.yml文件并将这两个图像都放入。一旦完成了它,管道就会调用docker-compose.yml文件。
我希望这会有所帮助。
发布于 2022-06-18 09:12:36
考虑一些基于CI/CD管道中部署的基本概念的建议:
gitlab-ci.yaml文件中的gitlab-ci.yaml关键字不用于什么的官方文档。该特性用于向作业运行时(如数据库)提供网络可访问服务:项目使用npm作为依赖关系管理系统,Gradle是一种构建工具。这两款软件都非常适合在GitLab管道作业中容器运行时的主机操作系统上运行。您需要这些工具来组装一些构建工件,因为您的代码已在Runner.build_project作业中基本映像的总体大小,并考虑通过网络将映像下载到运行程序的时间将如何影响您的作业和整个管道持续时间。如果可以通过将构建依赖关系分解为自定义Dockerfile来提高性能,则可以这样做。如果映像太大,则使用script关键字块中的shell命令在作业运行时下载它们。这两者都有优缺点。。
...脚本:- cd项目-服务器- npm安装-分级清洁构建-Pprod -Pwar -x测试-x integrationTest
gradlew),而不是直接使用gradle可执行文件。在您的项目中配置它并将包装器的配置文件检查到您的版本控制系统中,这将简化您的构建依赖性:https://docs.gradle.org/current/userguide/gradle_wrapper.htmlhttps://stackoverflow.com/questions/72644387
复制相似问题