上次基本把环境都搭建好了,下一步就是开始完成整个流程的自动化部署。源码:https://github.com/limingios/netFuture/tree/master/jenkins/
应用 | IP地址 | 服务 | 端口 | 安装应用 | 安装方式 |
---|---|---|---|---|---|
gitlab | 192.168.66.100 | gitlab | 10080 | gitlab | docker |
jenkins | 192.168.66.101 | jenkins | 8888 | jdk8 maven3.2 git2.8 | shell |
nexus | 192.168.66.102 | nexus | 8081 | nexus | docker |
tomcat | 192.168.66.103 | tomcat | 8080 | tomcat | docker |
IP地址 | 端口 | 用户名 | 密码 |
---|---|---|---|
192.168.66.100 | 10080 | root | 123456789qwe |
192.168.66.101 | 8888 | root | 8d31833e277c4b579a3be35fe2bdc7d4 |
192.168.66.102 | 8081 | admin | admin123 |
192.168.66.103 | 8080 |
代码比较简单为的是流程
修改配置,可以非本地化提交代码
可以新建用户建立仓库,或者用root建立仓库。
提示没有上传ssh 秘钥
查看本地的ssh秘钥,window环境直接使用git bash
ssh-keygen -t rsa -C "394498036@qq.com" cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh秘钥,101环境直接使
ssh-keygen -t rsa -C "394498036@qq.com" cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完毕
本地windows 代码提交
git init git add . git commit -m "注释语句" git remote add origin ssh://git@192.168.66.100:10022/root/idig8.git git push -u origin master
全局安全性配置
创建任务
口令随意写,等下要在gitlab做触发设置
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
100 gitlab触发器的设置
http://192.168.66.101:8888/job/idig8/build?token=123456
token的值就是jenkins上设置的。
等下有专门的对pipeline的编写
保存
101的配置私服nexus
cd .m2 pwd vi settings.xml
settings.xml
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <pluginGroups></pluginGroups> <proxies></proxies> <servers> <server> <id>nexus-releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>nexus-snapshots</id> <username>admin</username> <password>admin123</password> </server> </servers> <mirrors> <mirror> <id>nexus-releases</id> <mirrorOf>*</mirrorOf> <url>http://192.168.66.102:8081/nexus/content/groups/public</url> </mirror> <mirror> <id>nexus-snapshots</id> <mirrorOf>*</mirrorOf> <url>http://192.168.66.102:8081/nexus/content/repositories/snapshots</url> </mirror> </mirrors> <profiles> <profile> <id>nexus</id> <repositories> <repository> <id>nexus-releases</id> <url>http://nexus-releases</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> <repository> <id>nexus-snapshots</id> <url>http://nexus-snapshots</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>nexus-releases</id> <url>http://nexus-releases</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> <pluginRepository> <id>nexus-snapshots</id> <url>http://nexus-snapshots</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>nexus</activeProfile> </activeProfiles> </settings>
安装sshpass,ssh登陆不能在命令行中指定密码。sshpass的出现,解决了这一问题。sshpass用于非交互SSH的密码验证,一般用在sh脚本中,无须再次输入密码。
yum -y install sshpass
#!groovy pipeline { agent any //环境变量, environment { REPOSITORY="ssh://git@192.168.66.100:10022/root/idig8.git" MODULE="idig8" SCRIPT_PATH="/root/" remoteHost_tomcat= '192.168.66.103' } //流水线是如何提前,都是通过很多个stages下面的stage stages { stage('获取代码'){ steps{ echo " start fetch code from git ssh://git@192.168.66.100:10022/root/idig8.git" deleteDir() git "${REPOSITORY}" } } stage('代码静态检查') { steps{ echo " start code check" } } stage('编译+单元测试') { steps{ echo " start compile" sh""" cd $workspace/idig8/common-parent/ mvn -U clean install -Dmvn.test.skip=true -Ptest """ } } stage('jar包上传到nexus上') { steps{ echo " start maven update jar" sh""" cd $workspace/idig8/common-parent/common-utils mvn clean deploy cd $workspace/idig8/common-parent/common-dao mvn clean deploy cd $workspace/idig8/common-parent/common-service mvn clean deploy """ } } stage('移动目录到用户目录下') { steps{ echo "mv idig8.war" sh""" mv -f $workspace/idig8/common-parent/common-web/target/common-web.war ${SCRIPT_PATH}${MODULE}.war """ } } stage('拷贝文件到tomcat指定目录下') { steps{ echo "scp 目标文件" sh""" sshpass -p 'vagrant' ssh -p 22 -o stricthostkeychecking=no root@${remoteHost_tomcat} 'rm -rf /root/tomcat/tomcat-persistence/tomcat/data/${MODULE}*'; sshpass -p 'vagrant' scp -P 22 -o stricthostkeychecking=no ${SCRIPT_PATH}${MODULE}.war root@${remoteHost_tomcat}:/root/tomcat/tomcat-persistence/tomcat/data/${MODULE}.war; """ echo "打包完毕美滋滋 刷新tomcat查看吧" } } } }
结果20轮的pipeline的编写终于成功了
删除docker挂载的idig所有的目录,然后替换新的jar包放进去
PS:完成自动化部署,终于完成了 ,在自己的虚拟机环境下搞了3天,感觉好有成就感,首选shell脚本部署学习,pipeline并不是那么麻烦。里面多半是用shell的方式搞定了,多亏自己搞了2年shell的开发。没忘记,必须前2年了解的东西确定对自己的以后的路起关键作用。ssh的公钥也在里面起到了很重要的作用,希望老铁按照我的思路可以轻松的完成部署。感谢老铁的支持,本来想2篇写在一起的,后来又拆开了,因为内容太充实了。为了搞这个每天怼到晚上2点,下班就搞不容易啊。那就拜了个拜~来不及握手!