![](/img/trans.png)
[英]JavaScript heap out of memory while building GitLab CI/CD
[英]How to integrate various services for building a project in GitLab CI/CD?
我有一個項目需要 npm 和 gradle 來構建,以及 docker 來構建和推送圖像。
起初我認為我應該使用 gradle 和 npm setup 創建自己的 ubuntu 映像,但我發現這不是 docker 映像的用途。
因此,我希望將官方 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:我的 Dockerfile 用於安裝了 Gradle 和 Node 的自定義圖像。
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,我也嘗試了 Java、Gradle,但在路徑中也找不到它們。
我不知道為什么,因為我安裝了它們,你可以從 Dockerfile 中看出。
據我所知,一個 docker 鏡像等於一個構建。 因此,如果您有多個服務,您需要將每個服務構建到 docker 鏡像中,那么您可以將所有鏡像封裝到docker-compose.yml
文件中。
我認為您可以執行以下操作:
docker-compose.yml
文件並放置兩個圖像。 完成后,管道將調用docker-compose.yml
文件。
我希望這會有所幫助。
基於 CI/CD 管道中部署的基本概念,考慮一些建議:
gitlab-ci.yaml
文件中的services
關鍵字的用途。 該功能用於為您的作業運行時(如數據庫)提供網絡可訪問服務: https ://docs.gitlab.com/ee/ci/services/index.htmlnpm
作為依賴管理系統,Gradle 是一個構建工具。 這兩個軟件都非常適合在 GitLab 的 Pipeline 作業中容器運行時的主機操作系統上運行。 由於在 Runner 中下載代碼的同一主機上的作業,您需要這些工具來組裝一些構建工件。build_project
作業中基礎映像的總體大小,並考慮通過網絡將映像下載到 Runner 的時間將如何影響您的作業和整個管道持續時間。 如果可以通過將構建依賴項烘焙到自定義Dockerfile
中來提高性能,請執行此操作。 如果您的圖像太大,請使用script
關鍵字塊內的 shell 命令在作業運行時下載它們。 兩者都有優點和缺點。... script: - cd project-server - npm install - gradle clean build -Pprod -Pwar -x test -x integrationTest ...
gradlew
) 而不是直接使用gradle
可執行文件。 在您的項目中配置它並將包裝器的配置文件檢查到您的版本控制系統中,這將簡化您的構建依賴關系: https ://docs.gradle.org/current/userguide/gradle_wrapper.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.