Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.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
Node.js 如何基于GitHub webhook自动化docker部署?_Node.js_Linux_Git_Docker_Continuous Integration - Fatal编程技术网

Node.js 如何基于GitHub webhook自动化docker部署?

Node.js 如何基于GitHub webhook自动化docker部署?,node.js,linux,git,docker,continuous-integration,Node.js,Linux,Git,Docker,Continuous Integration,因此,我继承了一个应用程序,对当前的部署工作流不太满意。ec2服务器上运行着一个docker实例,开发人员一直在合并他们的本地工作,如下所示: rsync -arhvz --progress ./ ubuntu@52.12.345.67:/home/ubuntu/app --exclude node_modules 然后进入服务器本身并运行deploy.sh脚本。我只需要一个push事件到主分支来触发此同步并部署。怎么可能呢?据我所知,我们不为Docker hub帐户付费-我们没有私人Dock

因此,我继承了一个应用程序,对当前的部署工作流不太满意。ec2服务器上运行着一个docker实例,开发人员一直在合并他们的本地工作,如下所示:

rsync -arhvz --progress ./ ubuntu@52.12.345.67:/home/ubuntu/app --exclude node_modules
然后进入服务器本身并运行
deploy.sh
脚本。我只需要一个
push
事件到主分支来触发此同步并部署。怎么可能呢?据我所知,我们不为Docker hub帐户付费-我们没有私人Docker注册表。

一些解决方案:

  • 使用git脚本,该脚本将在每次本地推送到远程之前执行脚本
  • 在服务器上创建一个裸git repo,将您的更改推送到这个git remote,并使用
  • 使用Github webhook跟踪Github上的推送事件,您需要让服务器侦听端口才能接收webhook事件
预推钩 在本地存储库中,编辑/创建
.git/hooks/pre-push
文件:

#/bin/bash
rsync-arhvz——进度ubuntu@52.12.345.67:/home/ubuntu/app--排除节点模块
sshubuntu@52.12.345.67“/home/ubuntu/deploy.sh”
这样,您的修改将在每次本地推送到远程之前同步。也会触发
deploy.sh

在服务器上设置git repo并使用git部署到它 您可以在服务器上创建一个裸git repo,并创建一个
post receive
hook脚本,该脚本将使用
git
签出服务器repo。发件人:

#/bin/bash
当读取oldrev newrev ref时
做
#仅签出主服务器(或您希望部署的任何分支)
如果[[$ref=~.*/master$];
然后
echo“收到主参考。将主分支部署到生产…”
git--worktree=/home/ubuntu/app/deploy folder/--git dir=/home/ubuntu/app/project.git/checkout-f
其他的
echo“Ref$Ref已成功接收。不执行任何操作:此服务器上只能部署主分支。”
fi
完成
请注意,此解决方案仅使用git

GithubWebhook 您可以使用这个项目,它是一个Python服务器,监听webhook uri上的
POST
。它最初用于Docker Hub webhook,但也适用于Github webhook(尽管没有解析事件)

网钩 在您的服务器上:

  • 下载docker钩子python脚本
curlhttps://raw.githubusercontent.com/schickling/docker-hook/master/docker-hook >/usr/local/bin/docker-hook;chmod+x/usr/local/bin/docker-hook
  • 使用令牌启动它(例如,使用
    uuidgen
    生成):
docker hook-t 3ea4e9d8-8fff-47e5-a704-65ab21de6963-c/path/to/deploy.sh
在Github中,转到您的repo设置,以令牌作为路径创建webhook:

检查webhook是否正常工作(在“最近交付”选项卡中)

部署密钥 现在,由于要在服务器上触发一个
git pull
,您需要生成一个用于部署(只读)的ssh密钥,您需要在服务器端:

  • 如果尚未安装,请安装
    git
  • 生成密钥
  • 在repo/settings/Deploy key选项卡中复制此密钥
有关完整教程,请参见


现在,您需要编辑
deploy.sh
脚本以执行
git pull
或新的
git clone
到您选择的位置

而不知道部署什么。sh很难推荐下一步操作。也许您可以在当前流程中添加更多步骤,并在问题中添加
deploy.sh
脚本?如果您要在此管道中的某个位置构建映像,那么查看
Dockerfile
以及可能与部署相关的任何其他代码部分可能也会有所帮助。