wordpress博客类似/seo推广有哪些
什么是devops
研发(Development)和运维(Operations),字面意思上 DevOps 是指“开发运维一体化”,即通过工具辅助开发完成运维的部分工作,减少成本。
devops涉及的范围很广,覆盖到源码管理,到构建,测试,部署,运行 等环节,最终目的是实现一套高效的作业流程,把这些环节流畅地串接起来,自动化工作。
实践
本文基于 jenkins + git + maven + docker ,实现从 java项目源码拉取,编译,打包,生成docker镜像,发布镜像到远程仓库并运行 这一完整过程。
安装jenkins
官网完整安装教程:https://www.jenkins.io/zh/doc/book/installing/
- linux下war包安装
环境要求: jdk1.8+
-
下载最新的稳定版war包 https://www.jenkins.io/zh/download/
-
在下载目录执行命令:java -jar jenkins.war --httpPort=8889 (8889为jenkins管理后台的web端口,可自行定义,默认8080)
- 浏览器运行 http://localhost:8889
- docker下 jenkins安装
docker run \-u root \--name="jenkins" \-d \-p 8889:8080 \-p 50000:50000 \-v jenkins-data:/var/jenkins_home \-v /var/run/docker.sock:/var/run/docker.sock \jenkinsci/blueocean
- portainer下jenkins安装
结合portanier 的docker管理工具,在界面直接一键安装。
这样就完成安装了!
配置Jenkins
安装并运行后,在浏览器访问 localhost:8889 (笔者在之前的安装过程中 将端口定义为 8889 ,默认是8080)
根据提示,在服务器中找到密码
因为笔者是使用的docker安装,则需要先进入docker容器,再到对应路径查看密码
查询正在运行的jenkins容器ID
交互式进入jenkins的docker容器
docker exec -it b440df7b7655 /bin/bash
查看jenkins安装密码
cat /var/jenkins_home/secrets/initialAdminPassword
输入到界面进行安装
直接选择 【安装推荐的插件】
安装完推荐插件,就进入到创建用户的界面,创建好管理员用户,点击保存并完成
配置好jenkins根路径,可以直接使用默认的,点击保存并完成
这样就进入到jenkins的主界面了
常见错误:No valid crumb was included in the request
如果在操作过程中发现jenkins抛出这样的异常
主要是因为jenkins高版本关掉了在web页面控制CSRF的开关,如果是低版本可在【系统管理】-【全局安全设置】中关闭:
如果web界面没有找到此开关,需要进行如下操作:(笔者的jenkins是运行在docker里)
vi /usr/local/bin/jenkins.sh
找到exec java那行(大概是在第37行),添加-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
最终的效果如下
exec java -Duser.home="$JENKINS_HOME" -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true "${java_opts_array[@]}" -jar ${JENKINS_WAR} "${jenkins_opts_array[@]}" "$@"
然后重启docker容器
以war包直接运行的直接在启动命令加上
-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
安装插件:Maven Integration、Publish Over SSH
进入插件管理
搜索要安装的插件,进行安装
如果可选插件列表加载不出来数据,则需要调整 【高级】设置
需要将原有URL的https改为https即可,即改为 http://updates.jenkins.io/update-center.json
然后再重启 jenkins 服务
如果可选插件仍然为空,可能是你不会用。。。
需要输入关键字搜索才会展示出结果,笔者之前修改完配置各种求助仍然不出来插件,后面发现是要输入关键字去搜索才会显示...
在【已安装】中能找到这两个插件就说明已经成功安装了
配置ssh远程服务器
安装完 Publish Over SSH 后,需要在系统配置中配置好要连接的应用服务器(在后面的操作中需要使用jenkins远程ssh连接到应用服务器,进行构建后的应用部署运行)
配置JDK、Maven目录
(笔者是使用docker安装jenkins,所以容器里自带了jdk,只要把目录配置上去即可,PS:自动安装没试成功过)
maven 笔者是手动安装,因为自动安装一直没反应,放弃。
手动安装:
wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
tar -zvxf apache-maven-3.5.4-bin.tar.gz
设置环境变量
vi /etc/profile
MAVEN_HOME=/var/jenkins_home/apache-maven-3.5.4
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
设置完保存
source /etc/profile
创建任务
点击【新建任务】
选择构建maven 项目
配置git源码库
在jenkins配置git信息之前,需要先在git的仓库中配置ssh,笔者以gitee为例。
首先在jenkins的服务器生成SSH公钥
cd ~/.ssh
ssh-keygen -o
ssh-keygen 会确认密钥的存储位置(默认是 .ssh/id_rsa),然后它会要求你输入两次密钥口令。 如果你不想在使用密钥时输入口令,将其留空即可。 然而,如果你使用了密码,那么请确保添加了 -o 选项,它会以比默认格式更能抗暴力破解的格式保存私钥。 你也可以用 ssh-agent 工具来避免每次都要输入密码。
生成后使用cat命令查看公钥
cat ~/.ssh/id_rsa.pub
将生成的密钥 保存到gitee的ssh设置中
回到jenkins的git设置,将项目地址填入 Repository URL,然后点击添加
输入在git上配置好的
添加完Credentials,如无红色提示,则视为测试连接成功
配置maven构建命令
在Build模块配置好要构建的pom文件,以及maven命令
在maven命令中,笔者使用了 docker:build ,直接利用maven-docker插件,将构建完的项目打包成docker镜像,并部署到指定的docker仓库
关于maven-docker的细节,参考笔者之前的文章: 微服务实战(十九)Docker篇 从代码工程发布到Docker镜像的详细过程
配置构建完成后的shell操作
当maven命令执行完后,已经完成了代码拉取、编译、打包、生成docker镜像并发布到指定的远程docker仓库
接下来要做的就是在要部署的服务器上拉取docker镜像,停止并删除旧版本的应用容器(如果有的话),运行新的应用镜像
(应用服务器需要安装jdk、docker)
以上操作需要编写shell脚本,并且在jenkins中配置好应用服务器的ssh链接,jenkins会在build完成后自动连接应用服务器,并执行shell脚本完成以上操作
笔者的shell脚本可以参考:
!#/bin/bash#关闭旧版本容器
docker stop `docker ps -a| grep healthcare | awk '{print $1}' `#删除旧版本容器
docker rm `docker ps -a| grep healthcare | awk '{print $1}' `#启动构建好的docker镜像
docker run --name="healthcare" -itd -p 8888:8080 `docker images -a| grep healthcare | awk '{print $1,$2}' OFS=":" |head -n 1`
完成一次自动化的构建过程
当一切就绪后,试验一次自动化的构建吧。
保存完任务后,在Dashborad会展示此任务,点击“立即构建”,jenkins会按照配置进行作业
在构建历史中可以观测到所有任务的执行时间表,并且可以查看执行日志
日志中可以看到本次构建已经完成
同时在 portainer 平台可以看到应用容器已经更新了版本
旧版本的镜像还保留 (预留一定数目旧版本,可以立即进行应用版本回滚 )