ubuntu16.04+docker安装scm-manager搭建git服务器,并实现网站自动部署
前言
docker中安装scm-manager搭建git服务器,并实现网站自动部署
ubuntu使用scm-manager+java搭建git服务器并使用hook实现网站自动部署
window使用scm-manager+java搭建git服务器并使用hook实现网站自动部署
docker是个好东西,在使用scm-manager的时候也遇到啦点问题,如果直接部署在宿主机scm-manager就需要单独部署,我喜欢用docker-compose来一键自动化操作,但是发现scm-manager放docker后部署web跟宿主机有很大的不同,宿主机中是有git的,可以直接在post-receive中执行git pull 等命令实现更新web代码,
但是容器中不行,下面是一个方法使用ssh执行命令自动部署。如下
安装scm-manager
docker-compose.xml中的配置
scm-manager: image: sdorra/scm-manager container_name: scm-manager ports: - "${SCM_MANAGER_PORT}:${SCM_MANAGER_PORT}" volumes: - ${SOURCE_DIR}:/www/:rw - ${DATA_DIR}/scm:/var/lib/scm:rw - ./logs/scm:/var/log/scm:rw restart: always networks: - default
自动安装不用管,成功后创建自己的第一个git库。
自动部署
配置站点
先把代码拉到站点里面,注意里面添加上用户名密码,不然的话到后面自动部署 git pull时会让你输用户名和密码,就会卡到那里
git clone http://用户名:密码@www.xxxxxx.com/scm/git/名字 /www/站点目录
配置容器连接宿主机的ssh
生成ssh连接需要的key,所以先进入容器生成密钥,进入容器的shell
docker exec -it scm-manager /bin/sh
生成密钥
ssh-keygen -t rsa -C "735579768@qq.com"
复制id_rsa.pub 字符串
cat ~/.ssh/id_rsa.pub
全部复制,别漏了
登陆宿主机的shell,先查看当前用户目录有没有.ssh文件如果没有的话先创建文件夹
mkdir -p ~/.ssh
把上一步容器中生成的id_rsa.pub字符串添加进去 ~/.ssh/authorized_keys
echo ssh-rsa AAAAB3NzaC1yc2EAAAA**********************************@qq.com >> ~/.ssh/authorized_keys
完成啦ssh的配置
添加发布hook
路径如下
内容如下
#!/bin/sh ssh root@172.***.1 "git -C /www/website pull"
上面命令是在容器中使用ssh执行宿主机命令的,里面web目录也是宿主机的目录,git也是宿主机的命令,别搞错啦,下面权限添加完成后执行上面的命令看能不能连接到宿主机
注意使用下面命令添加可执行权限,要在容器中设置执行权限,退出当前的容器shell,再次以root权限身份进入容器shell,
docker exec -it -u root scm-manager /bin/sh
添加权限,注意后面那个路径,别搞错
chmod +x /var/lib/scm/repositories/git/mama/hooks/post-receive
最后添加一些文件然后push就可以把代码自动拉到站点啦,
容器中测试拉取代码
使用前先用上面脚本中的命令在容器中执行下看下能不能拉取代码,切记