使用 Ansible 自动部署项目
文章目录
[隐藏]
- 使用 Git 来自动部署
- 下面是具体操作
- 结论
如今部署代码真的是一件天大的事。
开发人员努力敲代码,基本没有时间登录服务器并逐个运行部署脚本。但是开发人员知道他们的部署所需要花费的大概时间,对部署各个工作的轻重缓急十分了解。
因此,开发人员与运维人员一起参与部署工作将真正有助于产品发布成功。
下面我们谈谈用Git的方式更轻松的部署应用。
使用 Git 来自动部署
如果让开发人员使用自己的 Git 仓库工具做部署,这必须在Git配置文件中添加额外的远程Git 仓库地址。
就像这样:
[remote "origin"] url = [email protected]:company/project.git url = [email protected]:project.git fetch = +refs/heads/*:refs/remotes/origin/*
或者这样
[remote "deploy"] url = [email protected]:project.git
开发人员只需要在同一时间在推送代码到不同的地方就可以了。如代码示例,一个放在Codebase,另一个用于生产环境部署。
下面是具体操作
我们只需要配置我们的git服务器,使得每当 git push 事件触发时,Git 服务器就远程或本地自动运行部署脚本。
所以,我们需要先配置git 服务器。
首先在 git 服务器上安装 git-core
sudo apt-get install git-core
然后我们需要创建一个用于Git操作用户
sudo useradd git passwd git
然后添加开发人员的主机的公钥文件,以便开发人员的电脑能够有权限访问 Git 服务器。
cat〜/ .ssh / id_rsa.pub | ssh git @ remote-server“mkdir -p〜/ .ssh && cat >>〜/ .ssh / authorized_keys”
然后在Git服务器上创建一个空的仓库
mkdir -p /home/user/project.git cd /home/swapnil/project-1.git git init --bare
这将创建一个git仓库,您可以看到名为 hooks文件夹,这里会存脚本用于接收文件后自动部署项目。
开发人员只需要在最开始的时候将 Git 服务器的项目仓库地址添加到他的项目中即可。
git remote add deploy git @ remote-server:project.git git push deploy master
这样就直接部署了开发人员的代码。不过这似乎浪费了开发人员不必要的时间,所以我们应该使用 Ansible 来让部署更加轻松。
首先运行下列命令
ansible-galaxy install PrabhuVignesh.push_to_deploy
然后将开发机器的公钥保存在中即可。
$ cat publickeys.txt ssh-rsa AAuyFUVFY65tYTFV567YTYTytytYTYTfyuV56FUYTVYTFYTVyTFYUG877686V767R76R67R76R6YTYTfyuVFUYTVYTFYTVyTFYUG877686V767R76R67R76R676V767676V76V768V876V76576V768V876V76Vv76V876VB76v7V76V76V6VBT9LLlNGtLo5pnEXIOPiz9X42ZdxBD721bG5XqDfPnz0JfgAYl6Zw4CXM0F6q0jiAQNJrtrfSNS92x1KMLY8CcVLKOZbpWdUHnouLdKCeM6dBHStpX7yjlb90fRKVZFch87eO0dyAoGWS3oBEYttFYL7s5dm/QV [email protected] ssh-rsa AAuyFUVFY65tYTFV567YTYTytytYTYTfyuV56FUYTVYTFYTVyTFYUG877686V767R76R67R76R6YTYTfyuVFUYTVYTFYTVyTFYUG877686V767R76R67R76R676V767676V76V768rrtrt54t46Vv76V876VB76v7V76V76V6VBT9LLlNGtLo5pnEXIOPiz9X42ZdxBD721bG5XqDfPnz0JfgAYl6Zb6sevtrrtyyw4CXM0F6q0jiAQNJrtrfSNS92x1KMLY8CcVLKOZbpWdUHnouLdKCeM6dBHStpX7yjlb90fRKVZFch87eO0dyAoGWS3oBEYttFYL7s5dm/QV [email protected] ssh-rsa AAuyFUVFY65tYTFV567YTYTytytYTYTfyuV56FUYTVYTFYTVyTFYUG877686V767R76R67R76R6YTYTfyuVFUYTVYTFYTVyTFYUG877686V767R76R67R76R63435343r4r3453434r34r34f34356trfhgjhgkjmnhi87t665rg6dvrdxdcser536c5456yvu675678br56er56v5v7y5y5gbr5576un8n78i8it0F6q0jiAQNJrtrfSNS92x1KMLY8CcVLKOZbpWdUHnouLdKCeM6dBHStpX7yjlb90fRKVZFch87eO0dyAoGWS3oBEYttFYL7s5dm/QV [email protected]
接着在环境变量中添加 path_for_authorized_keys,git_repository_path,post_receive_script,pre_receive_script 中的路径。
--- roles: - role: PrabhuVignesh.push_to_deploy path_for_authorized_keys: /path/to/public_key/file git_repository_path: /home/path/to/your/repo.git post_receive_script: "script to deploy the code" pre_receive_script: "Prepare storing code"
git服务器的所有配置将通过 Ansible 来完成。
当开发人员将代码推送到 git 服务器时,应用程序就会执行用于后接收和预接收运行的脚本,如“puppet deploy script”,“cap deploy …”等,并且将自动部署。
另外使用这样的方式,只有在推送Master分支的时候才会运行部署脚本,这就避免不必要的部署。
#!/bin/bash do if [[ $ref =~ .*/master$ ]]; then echo "I am master branch push and i will run deployment script" # Run deployment script..... else echo "Ref $ref successfully received. Doing nothing: only the master branch may be deployed on this server." fi done
结论
GIT真的是一个令人赞叹的IT自动化工具,特别让开发和运维更好的协作,让发布新版本更加轻松。
原文出处:qkldx -> https://qkldx.net/topic/420/%E4%BD%BF%E7%94%A8-ansible-%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2%E9%A1%B9%E7%9B%AE