热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用GitLab在自己的服务器上自动部署DockerImage?》经验,为你挑选了1个好方法。

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

我知道该怎么做以及如何:

    我知道我必须将我的Git回购移动到Gitlab.

    Push to repo将触发CI脚本.

    Gitlab将我的docker镜像构建到Gitlab Docker Registry中.

问题是:

我需要做些什么来强制我的VPS上的docker compose从Gitlab中提取新图像并重启服务器?我知道(纠正我,如果我错了)在我的VPS上我应该docker-compose pull && docker-compose up在我的app文件夹中运行,但我真的不知道如何使用Gitlab自动生成它?



1> Vitaly Velik..:

我需要做些什么来强制我的VPS上的docker compose从Gitlab中提取新图像并重启服务器?

@ m-uu,你根本不需要重启服务器,只docker-compose up需要拉新图像并重新启动服务

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

是的,你是正确的方式.看看我的Gitlab CI配置文件,我认为为Java项目更改它并不困难.只需提供有关如何构建,推送到注册表以及将映像部署到服务器的建议.您需要做的一件事是生成SSH密钥并将公共服务器推送到服务器(.ssh/authorized_keys)和专用于GITLAB管道密钥变量(https://docs.gitlab.com/ee/ci/variables/#secret-variables)

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

你还需要支持Docker的Gitlab runner.请问如何在Gitlab doc中安装它.

关于阶段:

build - 只需改变它就可以构建你需要的东西

build_image - 非常简单,只需登录gitlab注册表,构建新映像并将其推送到注册表.看一下cache,它需要在各个阶段之间缓存文件,对你来说可能有所不同.

deploy-dev - 那部分更多关于你的要求.这里前6个命令只安装ssh并创建私钥文件以访问您的VPS.只需将其复制并将您的SSH_PRIVATE_KEY添加到Gitlab UI中的秘密变量即可.最后3个SSH命令对您来说更有趣.


推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
  • vue使用
    关键词: ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 2019独角兽企业重金招聘Python工程师标准
    本文介绍了2019独角兽企业重金招聘Python工程师的标准。同时解释了Alpha、Beta、RC、GA、RTM、OEM、RVL、EVAL、RTL、α、β、λ等相关术语的含义和区别。 ... [详细]
  • 在Windows10系统上使用VMware创建CentOS虚拟机的详细步骤教程
    本文详细介绍了在Windows10系统上使用VMware创建CentOS虚拟机的步骤,包括准备条件、安装VMware、下载CentOS ISO文件、创建虚拟机并进行自定义配置、设置虚拟机的ISO与网络、进行安装和配置等。通过本文的指导,读者可以轻松地创建自己的CentOS虚拟机并进行相应的配置和操作。 ... [详细]
  • 引号快捷键_首选项和设置——自定义快捷键
    3.3自定义快捷键(CustomizingHotkeys)ChemDraw快捷键由一个XML文件定义,我们可以根据自己的需要, ... [详细]
  • java程序设计试题_《Java语言程序设计》期末考试模拟试题——填空题和编程题...
    一、根据题意,填写出空格中的内容Java平台包括三个技术方向,其中J2ME代表____________、J2SE代表___________、J2EE代表 ... [详细]
author-avatar
用户da7lbtmrer
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有