进军DevOps,Jenkins+GitHub实现自动化部署,一键上传,自动部署!

Posted Alex_996

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进军DevOps,Jenkins+GitHub实现自动化部署,一键上传,自动部署!相关的知识,希望对你有一定的参考价值。

前段时间接了几个WEB项目,其实很多开发任务都不是很难,但是部署很麻烦,虽然有宝塔Linux面板这种工具,提升了不少效率,但是其实很多操作还是重复的,比如上传代码、重启nginx、重启程序等。作为一个程序员,任何一个重复超过三次的行为都是不能忍受的,虽然部署是运维的工作,但程序员不就是抢人饭吃的嘛,干脆连运维的活也干了。今天调研了一下DevOps,用Jenkins+GitHub实现了代码上传后自动部署,再也不用去宝塔面板点来点去了。

DevOps是什么?

关于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,最简单的开发运维流程。

GitCode代码自动上传GitHub(可选)

本节为可选内容,主要是因为有些同学因为某些原因访问不了GitHub,所以我们在国内平台建立了一些镜像仓库,选择了CSDN的GitCode平台,但是GitCode和GitHub仓库的同步还需要一些配置,而Jenkins也主要是跟GitHub进行交互。

  1. 首先要有一个GitCode的代码仓库,我这是一个Python Django后端的项目。
  2. 然后在GitHub上创建一个同名的空仓库,同步同名应该无所谓,我觉得同名最好,我这已经同步了代码了。

  1. 之后需要在GitHub上生成一个Access Token,因为GitHub在2021年8月13号之后,镜像仓库就不支持用户名密码进行认证了,必须用Access Token。


按照图中标记顺序依次点击,然后生成token的时候可以把所有的权限都选上,然后我这就生成了一个GitCode镜像的token,注意这个token只会显示一次,记得保存好,不然就要重新生成了。

  1. 在GitCode中进行镜像仓库配置。

配置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安装

Jenkins官方安装文档:https://www.jenkins.io/zh/doc/book/installing/

因为Jenkins本身是用Java开发的,所以如果没有安装Java需要安装一下。

  1. Java安装,参考:https://blog.csdn.net/geekun/article/details/51325525
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
echo y|sudo apt-get install openjdk-8-jdk
  1. Jenkins安装
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
echo y|sudo apt-get install jenkins
  1. Jenkins启动
    Jenkins 是以服务的形式运行的,故可使用如下两个管理服务,默认使用 8080 端口。

启动服务:sudo service jenkins start
开机默认启动Jenkins:systemctl enable jenkins
相关服务命令:sudo service jenkins start|stop|restart

  1. Jenkins访问,安装成功后,可以在浏览器输入地址:http://IP:8080。IP地址替换为你的服务器IP或者本地地址,如果是服务器端口没打开的话可以去控制台开一下。

    图中红色的地址就是默认密码,可以在服务器上通过cat命令查看一下,然后输入到下面的password即可。
  2. Jenkins插件安装,选择第一项安装推荐的插件即可。

  3. 创建Admin用户名和密码

GitHub项目配置SSH

从服务器的Jenkins上下载GitHub的代码需要配置好SSH,这样才能下载代码。

  1. 进入当前用户根目录下的.ssh文件夹
cd ~
cd .ssh/
  1. 生成ssh秘钥
ssh-keygen -t rsa -C "你的邮箱"
  1. 可以发现~/.ssh目录下就生成了两个文件,一个是ssh私钥id_rsa,一个是ssh公钥id_rsa.pub

    可以通过cat命令查看相应的秘钥内容。
  2. 然后将生成的公钥内容配置到GitHub。

创建工作流

工作流简单讲就是Jenkins将代码从GitHub上Clone到本地,然后根据命令进行部署。

  1. 创建项目

  2. 输入项目名称,选择自由风格的项目。

  3. 点击OK之后进入配置界面,在源码管理中选择git,输入项目url,注意通过ssh下载代码需要使用GitHub上仓库的ssh链接,设置分支。

  1. 配置ssh私钥


然后在Key中输入生成的ssh私钥。

  1. 配置触发器和构建命令。


触发器表示当GitHub上出现push操作时,将触发Jenkins自动下载最新代码。

构建命令选择执行shell命令,我这里就直接通过python mange.py runserver启动了,后面可以通过docker-compose构建。

  1. 最后保存配置即可

一键上传部署测试

以上配置完成之后,我们就可以测试一下,本地代码执行push操作,是否可以自动部署到服务器。

  1. 本地提交代码

  1. GitCode提交成功

  1. GitHub提交成功

  1. Jenkins自动部署成功

  1. 网站部署成功


Yes! 以后就只需要提交代码就OK了,再也不用自己手动部署了。

以上是关于进军DevOps,Jenkins+GitHub实现自动化部署,一键上传,自动部署!的主要内容,如果未能解决你的问题,请参考以下文章

实现DevOps需要的工具

devops学习笔记-jenkins实现基础CI/CD操作

devops-jenkins-Pipeline基础语法

企业DevOps之路:Jenkins 流水线

devops学习笔记-jenkins pipeline流水线发布

Jenkins北京线下沙龙:Jenkins Driven CD&DevOps