Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何使用GitLab在自己的服务器上自动部署Docker映像?_Spring_Continuous Integration_Gitlab_Gitlab Ci - Fatal编程技术网

Spring 如何使用GitLab在自己的服务器上自动部署Docker映像?

Spring 如何使用GitLab在自己的服务器上自动部署Docker映像?,spring,continuous-integration,gitlab,gitlab-ci,Spring,Continuous Integration,Gitlab,Gitlab Ci,我试着在谷歌上搜索几个小时,但找不到它。 我有Java/Spring应用程序(+MySQL,如果有必要的话),我希望为此创建CI 我知道该做什么和如何做: 我知道我必须将我的Git回购协议转移到Gitlab Push to repo将触发CI脚本 Gitlab将把我的docker映像构建到Gitlab docker注册表中 问题是: 我必须做什么才能强制我的VPS上的docker compose从Gitlab中提取新映像并重新启动服务器? 我知道(如果我错了,请纠正我),在我的VPS上,我应该在

我试着在谷歌上搜索几个小时,但找不到它。 我有Java/Spring应用程序(+MySQL,如果有必要的话),我希望为此创建CI

我知道该做什么和如何做:

  • 我知道我必须将我的Git回购协议转移到Gitlab
  • Push to repo将触发CI脚本
  • Gitlab将把我的docker映像构建到Gitlab docker注册表中
  • 问题是:

    我必须做什么才能强制我的VPS上的docker compose从Gitlab中提取新映像并重新启动服务器? 我知道(如果我错了,请纠正我),在我的VPS上,我应该在我的应用程序文件夹中运行
    docker compose pull和&docker compose up
    ,但我真的不知道如何使用Gitlab自动运行它

    我必须做什么才能强制我的VPS上的docker compose从Gitlab中提取新映像并重新启动服务器

    @m-uu,您根本不需要重新启动服务器,只需执行
    docker compose-up
    即可获取新映像并重新启动服务

    我知道(如果我错了,请纠正我)在我的VPS上,我应该在我的应用程序文件夹中运行docker compose pull&docker compose,但我真的不知道如何使用Gitlab自动运行它

    是的,你走对了。看看我的Gitlab CI配置文件,我认为为Java项目更改它并不困难。只需告诉您如何构建、推送到注册表并将映像部署到服务器即可。您需要做的一件事是生成SSH密钥并将public推送到服务器(.SSH/authorized_密钥)和private推送到GITLAB管道秘密变量()

    您还需要具有Docker支持的Gitlab runner。在Gitlab文档中如何安装它

    关于阶段:

    • 构建
      -只需将其更改为构建您需要的内容即可
    • build_image
      -非常简单,只需登录到gitlab注册表,构建新映像并将其推送到注册表。看一下缓存部分,它需要在不同的阶段之间缓存文件,对您来说可能会有所不同
    • deploydev
      -这一部分更详细地介绍了您的要求。这里的前6个命令只需安装ssh并创建私钥文件即可访问VPS。只需复制它并将您的SSH_私钥添加到Gitlab UI中的secret vars。最后3个SSH命令对您来说更有趣
    1。在哪里为VPS配置SSH_私钥、IP等?@MU on gitlab-Settings-CI/CD管道和秘密变量谢谢。您能否详细说明部署脚本中发生了什么?我可以试着理解部分,但更希望知道每一行中发生了什么。@MU好吧,我已经在帖子中添加了更多的信息,并对配置文件中最有趣的行进行了注释。运行您自己的设置就足够了。不要犹豫,阅读Gitlab文档了解更多信息)太好了,谢谢!最后一件事(对不起!)-如何在Docker Compose yml中从GitLab指定我的容器?我必须使用GitLab+MySQL中的容器
    cache:
      key: "cache"
      paths:
      - junte-api
    
    stages:
      - build
      - build_image
      - deploy
    
    build:
      image: golang:1.7
      stage: build
      script:
        - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
        - eval $(ssh-agent -s)
        - echo "$SSH_PRIVATE_KEY" > ~/key && chmod 600 ~/key
        - ssh-add ~/key
        - mkdir -p ~/.ssh
        - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
    
        - go get -u github.com/kardianos/govendor
        - mkdir -p $GOPATH/src/github.com/junte/junte-api
        - mv * $GOPATH/src/github.com/junte/junte-api
        - cd $GOPATH/src/github.com/junte/junte-api
        - govendor sync
        - go build -o junte-api
        - cd -
        - cp $GOPATH/src/github.com/junte/junte-api .
    
    build_image:
      image: docker:latest
      stage: build_image
      script:
        - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
        - docker build -t $CI_REGISTRY_IMAGE .
        - docker push $CI_REGISTRY_IMAGE
    
    deploy-dev:
      stage: deploy
      image: junte/ssh-agent
      variables:
        # should be set up at Gitlab CI env vars
        SSH_PRIVATE_KEY: $SSH_DEV_PRIVATE_KEY
      script:
        # copy docker-compose yml to server
        - scp docker-compose.dev.yml root@SERVER_IP:/home/junte/junte-api/
        # login to gitlab registry       
        - ssh root@SERVER_IP docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
        # then we cd to folder with docker-compose, run docker-compose pull to update images, and run services with `docker-compose up -d`
        - ssh root@SERVER_IP "cd /home/junte/junte-api/ && docker-compose -f docker-compose.dev.yml pull api-dev && HOME=/home/dev docker-compose -f docker-compose.dev.yml up -d"
      environment:
          name: dev
      only:
        - dev