赞
踩
前段时间接了几个WEB项目,其实很多开发任务都不是很难,但是部署很麻烦,虽然有宝塔Linux面板这种工具,提升了不少效率,但是其实很多操作还是重复的,比如上传代码、重启nginx、重启程序等。作为一个程序员,任何一个重复超过三次的行为都是不能忍受的,虽然部署是运维的工作,但程序员不就是抢人饭吃的嘛,干脆连运维的活也干了。今天调研了一下DevOps,用Jenkins+GitHub实现了代码上传后自动部署,再也不用去宝塔面板点来点去了。
关于DevOps是什么?首先要明确开发过程中参与的人员都有哪些,开发团队负责写代码开发新功能,运维团队负责在服务器部署代码让用户能够访问,可以说各司其职。那么,DevOps的意图是什么呢?即在两个团队之间,建立良好的沟通和协作,更快更可靠的创建高质量软件!
DevOps是一种软件开发方法,涉及软件在整个开发生命周期中的持续开发,持续测试,持续集成,持续部署和持续监控。
不扯淡了,我觉得DevOps就是让开发的同学抢运维的同学饭吃的,开发运维一体化,那么开发的同学只需要学一点工具就可以自动化部署。当然专业的运维不可能那么简单的就被抢了饭碗,真正的项目部署还要解决一大堆环境问题,各种生产测试环境切来切去,哎呀,作为开发我的脑子是不够用了。
本文是从开发的角度简单涉及运维,我也只是被每次部署的重复性操作搞烦了才研究了一下,并不代表专业的运维。
工欲善其事必先利其器,没有工具链条的打通任督二脉DevOPs是走不通的。DevOps工具链是研发与运维博弈的产物,尽可能地自动化。
DevOps 的工具链中包括版本控制&协作开发工具、自动化构建和测试工具、持续集成&交付工具、部署工具、维护工具、监控,警告&分析工具等等。
版本控制&协作开发:GitHub、GitLab、BitBucket、SubVersion、Coding、Bazaar
自动化构建和测试:Apache Ant、Maven 、Selenium、PyUnit、QUnit、JMeter、Gradle、PHPUnit、Nexus
持续集成&交付:Jenkins、Capistrano、BuildBot、Fabric、Tinderbox、Travis CI、flow.ci Continuum、LuntBuild、CruiseControl、Integrity、Gump、Go
容器平台: Docker、Rocket、Ubuntu(LXC)、第三方厂商如(AWS/阿里云)
日志管理:Logstash、CollectD、StatsD
监控,警告&分析:Nagios、Ganglia、Sensu、zabbix、ICINGA、Graphite、Kibana
代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion
构建工具:Ant、Gradle、maven
自动部署:Capistrano、CodeDeploy
持续集成(CI):Bamboo、Hudson、Jenkins
脚本语言:python、ruby、shell
系统监控:Datadog、Graphite、Icinga、Nagios
性能监控:AppDynamics、New Relic、Splunk
压力测试:JMeter、Blaze Meter、loader.io
Web服务器:Apache、Nginx、IIS
数据库:MySQL、Oracle、PostgreSQL等关系型数据库;cassandra、mongoDB、redis等NoSQL数据库
说多了,本文涉及的工具只有:Git、GitHub、Jenkins、Docker,最简单的开发运维流程。
本节为可选内容,主要是因为有些同学因为某些原因访问不了GitHub,所以我们在国内平台建立了一些镜像仓库,选择了CSDN的GitCode平台,但是GitCode和GitHub仓库的同步还需要一些配置,而Jenkins也主要是跟GitHub进行交互。
按照图中标记顺序依次点击,然后生成token的时候可以把所有的权限都选上,然后我这就生成了一个GitCode镜像的token,注意这个token只会显示一次,记得保存好,不然就要重新生成了。
配置Git仓库URL的时候注意要增加用户名,然后密码就是生成的token,我这就只镜像了master分支。
注意密码一定是你生成的token,不要用你GitHub的账号和密码,否则会遇到如下报错:
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for 'https://github.com/xx/xx.git/'
创建成功后,所有GitCode的推送操作,都会同步到GitHub,这样开发的同学也可以间接推送代码到GitHub了。
Jenkins官方安装文档:https://www.jenkins.io/zh/doc/book/installing/
因为Jenkins本身是用Java开发的,所以如果没有安装Java需要安装一下。但是这样可能会导致本地的Java被覆盖,所以我这里选择了通过Docker安装并启动Jenkins。
docker pull jenkins/jenkins
adduser jenkins
chmod 777 -R /home/jenkins
docker run -d -uroot -p 9090:8080 -p 50000:50000 --name jenkins --restart=always -v /home/jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime jenkins/jenkins
命令 | 描述 |
---|---|
-d | 后台运行容器,并返回容器ID |
-uroot | 使用 root 身份进入容器,推荐加上,避免容器内执行某些命令时报权限错误 |
-p 9095:8080 | 将容器内8080端口映射至宿主机9095端口,这个是访问jenkins的端口 |
-p 50000:50000 | 将容器内50000端口映射至宿主机50000端口 |
--name jenkins | 设置容器名称为jenkins |
-v /home/jenkins_home:/var/jenkins_home | :/var/jenkins_home目录为容器jenkins工作目录,我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录 |
-v /etc/localtime:/etc/localtime | 让容器使用和服务器同样的时间设置 |
jenkins/jenkins | 镜像的名称,这里也可以写镜像ID |
查看日志:
docker logs jenkins
查看登录密码:
cat jenkins/secrets/initialAdminPassword
从服务器的Jenkins上下载GitHub的代码需要配置好SSH,这样才能下载代码。
cd ~
cd .ssh/
ssh-keygen -t rsa -C "你的邮箱"
~/.ssh
目录下就生成了两个文件,一个是ssh私钥id_rsa
,一个是ssh公钥id_rsa.pub
。可以通过配置163邮箱让每次构建的通知都同步给你邮件。
2. 生成授权码
#TODO: 后续再补充,饿了,吃饭。
工作流简单讲就是Jenkins将代码从GitHub上Clone到本地,然后根据命令进行部署。
创建项目
输入项目名称,选择自由风格的项目。
点击OK之后进入配置界面,在源码管理中选择git,输入项目url,注意通过ssh下载代码需要使用GitHub上仓库的ssh链接,设置分支。
然后在Key中输入生成的ssh私钥。
触发器表示当GitHub上出现push操作时,将触发Jenkins自动下载最新代码。
构建命令选择执行shell命令,我这里就直接通过python mange.py runserver
启动了,后面可以通过docker-compose构建。
以上配置完成之后,我们就可以测试一下,本地代码执行push操作,是否可以自动部署到服务器。
Yes! 以后就只需要提交代码就OK了,再也不用自己手动部署了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。