#305  如何利用docker进行持续部署
Closed
dreamsaddle opened 3 years ago

我在本地机器上部署了ondev。想要通过docker进行持续集成和持续部署,目前我能完成持续集成部分的工作,但是持续部署就没什么头绪。

下图是我在测试时的控制台输出内容。

code.onedev.io/projects/160/attachment/70014e28-9295-4c10-9d37-a6baafd378e6/image.png?v=1622357404435

image.png

下面是我完整的构建文件

version: 6
jobs:
- name: dev deploy
  steps:
  - !CheckoutStep
    name: checkout
    cloneCredential: !DefaultCredential {}
    condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
  - !CommandStep
    name: detect build version
    image: jdk8:v1.0
    commands:
    - echo "Detecting project version (may require some time while downloading maven
      dependencies)..."
    - echo $(mvn org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate -Dexpression=project.version
      -q -DforceStdout) > buildVersion
    condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
  - !SetBuildVersionStep
    name: set build version
    buildVersion: '@file:buildVersion@'
    condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
  - !CommandStep
    name: maven package
    image: jdk8:v1.0
    commands:
    - echo "--------- mvn clean start---------"
    - mvn clean
    - echo "--------- mvn clean end---------"
    - ''
    - echo "--------- mvn package start---------"
    - mvn package
    - echo "--------- mvn package end---------"
    condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
  - !CommandStep
    name: run
    image: jdk8:v1.0
    commands:
    - ls
    - echo "========================"
    - ls target
    - java -jar -Dspring.profiles.active=local -Dserver.port=6000 target/erp-0.6.2.jar
    condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
  triggers:
  - !BranchUpdateTrigger
    branches: master
    paths: -.onedev-buildspec.yml **/*
    projects: ErpSystemService
  retryCondition: never
  maxRetries: 3
  retryDelay: 30
  cpuRequirement: 250m
  memoryRequirement: 128m
  caches:
  - key: maven-cache
    path: /usr/local/software/mvn_repo
  timeout: 188888888
Robin Shen commented 3 years ago

你先试试直接在你本机终端启动jdk8:v1.0这个image,并加载上你的源代码,然后手动运行”mvn clean"和"mvn package"看看会不会有什么错误。

dreamsaddle commented 3 years ago

@robin 你好,我在终端运行得到以下结果。是不是因为docker image运行资源不足造成的呀?

image_3.png

dreamsaddle commented 3 years ago

@robin 你好,就是因为我docker image 运行资源不足造成的。

请教一下,我在一个image中构建的jar包,怎么让其跑在另一个image中呢?

Robin Shen commented 3 years ago

后面在加一个command step,然后在那个step里面指定需要的image,并访问前一个step生成的文件。同一个job的不同step共享同一个workspace

Robin Shen commented 3 years ago

运行资源不足可以试试看在docker executor的配置里指定一些memory/cpu的参数(通过advanced里面的run options参数)

dreamsaddle commented 3 years ago

@robin 好的,感谢指导!

Robin Shen changed state to 'Closed' 3 years ago
Previous Value Current Value
Open
Closed
dreamsaddle commented 3 years ago

@robin 你好,还需要向您请教一下。

就是我需要在image中访问宿主机的docker,我通过VOLUME指令未能实现。请问需要怎么配置呀?

Dockerfile

VOLUME /usr/bin/docker
VOLUME /var/run/docker.sock

我通过 docker run -it -v /var/run/docker.sock:/var/run/docker.sock -v /usr/local/bin/docker:/usr/bin/docker jdk8:v1.0 /bin/bash 运行,但是并不能访问宿主机docker

Robin Shen commented 3 years ago

OneDev运行step指定的image时,已经加了选项-v /var/run/docker.sock:/var/run/docker.sock,所以在你step的image中访问的就是宿主机的docker。

dreamsaddle commented 3 years ago

@robin 也就是说我使用OneDev时,不需要指定虚拟卷就可以直接在image中使用docker命令吧?只要我的宿主机上安装了docker。

Robin Shen commented 3 years ago

是的,但是需要你的image里面安装了docker。

issue 1 of 1
Type
Question
Priority
Normal
Assignee
Issue Votes (0)
Watchers (3)
Reference
onedev/server#305
Please wait...
Page is in error, reload to recover