当前位置:   article > 正文

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

github jenkins 自动部署

前段时间接了几个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/'
  • 1
  • 2
  • 3

创建成功后,所有GitCode的推送操作,都会同步到GitHub,这样开发的同学也可以间接推送代码到GitHub了。

Jenkins安装

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

因为Jenkins本身是用Java开发的,所以如果没有安装Java需要安装一下。但是这样可能会导致本地的Java被覆盖,所以我这里选择了通过Docker安装并启动Jenkins。

  1. 下载镜像
docker pull jenkins/jenkins
  • 1

在这里插入图片描述

  1. 创建目录
adduser jenkins
chmod 777 -R /home/jenkins
  • 1
  • 2
  1. 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
  • 1
命令描述
-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
  • 1

在这里插入图片描述
查看登录密码:

cat jenkins/secrets/initialAdminPassword
  • 1
  1. Jenkins访问,安装成功后,可以在浏览器输入地址:http://IP:9090。IP地址替换为你的服务器IP或者本地地址,如果是服务器端口没打开的话可以去控制台开一下。
    在这里插入图片描述
    图中红色的地址就是默认密码,可以在服务器上通过cat命令查看一下,然后输入到下面的password即可。
  2. Jenkins插件安装,选择第一项安装推荐的插件即可。
    在这里插入图片描述
    在这里插入图片描述
  3. 创建Admin用户名和密码
    在这里插入图片描述

GitHub项目配置SSH

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

  1. 进入当前用户根目录下的.ssh文件夹
cd ~
cd .ssh/
  • 1
  • 2
  1. 生成ssh秘钥
ssh-keygen -t rsa -C "你的邮箱"
  • 1
  1. 可以发现~/.ssh目录下就生成了两个文件,一个是ssh私钥id_rsa,一个是ssh公钥id_rsa.pub
    在这里插入图片描述
    可以通过cat命令查看相应的秘钥内容。
  2. 然后将生成的公钥内容配置到GitHub。
    在这里插入图片描述

配置邮箱通知(可选)

可以通过配置163邮箱让每次构建的通知都同步给你邮件。

  1. 开启SMTP服务

在这里插入图片描述
在这里插入图片描述
2. 生成授权码
在这里插入图片描述

#TODO: 后续再补充,饿了,吃饭。

创建工作流

工作流简单讲就是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了,再也不用自己手动部署了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/222262
推荐阅读
相关标签
  

闽ICP备14008679号