首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用GitLab在自己的服务器上自动部署Docker?

问如何使用GitLab在自己的服务器上自动部署Docker?
EN

Stack Overflow用户
提问于 2017-06-14 13:03:26
回答 1查看 15.3K关注 0票数 21

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

我知道该怎么做和怎么做:

  1. 我知道我得把我的Git回购移到Gitlab。
  2. 推动回购将触发CI脚本。
  3. Gitlab将把我的码头图像建到Gitlab码头注册中心。

的问题是:

我要怎么做才能迫使我的VPS上的对接者组成从Gitlab中提取新映像并重新启动服务器?我知道(如果我错了就纠正我的话),在我的VPS上,我应该在我的应用程序文件夹中运行docker-compose pull && docker-compose up,但我真的不知道如何使用Gitlab自动运行它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-14 22:07:11

我要怎么做才能迫使我的VPS上的对接者组成从Gitlab中提取新映像并重新启动服务器?

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

我知道(如果我错了就纠正我的话),在我的VPS上,我应该在我的应用文件夹中运行对接-编写、拉和对接-组合,但是我真的不知道如何用Gitlab自动完成它?

是的,你走的路是对的。看看我的Gitlab CI配置文件,我认为为Java项目更改它并不困难。只需给出如何构建、推送到注册表和将映像部署到服务器的想法即可。您需要做的一件事是生成SSH密钥,并将公共密钥推送到服务器(.SSH/特授权密钥)和私有到GITLAB管道秘密变量(https://docs.gitlab.com/ee/ci/variables/#secret-variables)。

代码语言:javascript
复制
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

你还需要有码头支持的Gitlab跑步者。如何在Gitlab文档中安装它。

关于阶段:

  • build -只需将其更改为构建所需的
  • build_image -非常简单,只需登录到gitlab注册中心,构建新图像并将其推送到注册表。看看cache部件,它需要在各个阶段之间缓存文件,并且对您来说可能是不同的。
  • deploy-dev --这部分更多的是关于你要求的。在这里,前6个命令只需安装ssh并创建您的私钥文件即可访问您的VPS。只需复制它并将您的SSH_PRIVATE_KEY添加到Gitlab中的秘密vars。最后3个SSH命令对您来说更有趣。
票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44545635

复制
相关文章

相似问题

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