前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >『互联网架构』软件架构-jenkins搭建和 maven gitlab自动化部署流程(下)(六)

『互联网架构』软件架构-jenkins搭建和 maven gitlab自动化部署流程(下)(六)

作者头像
IT架构圈
发布2019-03-06 14:58:13
6240
发布2019-03-06 14:58:13
举报
文章被收录于专栏:IT架构圈

上次基本把环境都搭建好了,下一步就是开始完成整个流程的自动化部署。源码: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

本地项目部署到100上gitlab

  • 本地代码

代码比较简单为的是流程

  • 本地提交到gitlab上

修改配置,可以非本地化提交代码

可以新建用户建立仓库,或者用root建立仓库。

提示没有上传ssh 秘钥

查看本地的ssh秘钥,window环境直接使用git bash

代码语言:javascript
复制
ssh-keygen -t rsa -C "394498036@qq.com"
cat /c/Users/Administrator/.ssh/id_rsa.pub

查看jenkins的ssh秘钥,101环境直接使

代码语言:javascript
复制
ssh-keygen -t rsa -C "394498036@qq.com"
cat /root/.ssh/id_rsa.pub

本地windows 和 101的jenkins添加完毕

本地windows 代码提交

代码语言:javascript
复制
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

本地项目部署到101上 jenkins

  • 全局安全性配置
  • 创建任务

口令随意写,等下要在gitlab做触发设置 Use the following URL to trigger build remotely: JENKINSURL/job/idig8/build?token=TOKENNAME 或者 /buildWithParameters?token=TOKEN_NAME

100 gitlab触发器的设置 http://192.168.66.101:8888/job/idig8/build?token=123456 token的值就是jenkins上设置的。

等下有专门的对pipeline的编写

保存

101的配置私服nexus

代码语言:javascript
复制
cd .m2
pwd
vi settings.xml

settings.xml

代码语言:javascript
复制
<?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脚本中,无须再次输入密码。

代码语言:javascript
复制
yum -y install sshpass

测试gitlab和jenkins

正式编写

  • pipeline
代码语言:javascript
复制
#!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查看吧"
            }
        }

    }
}
只要push代码流水线自动开启工作,真是美滋滋啊

结果20轮的pipeline的编写终于成功了 删除docker挂载的idig所有的目录,然后替换新的jar包放进去

PS:完成自动化部署,终于完成了 ,在自己的虚拟机环境下搞了3天,感觉好有成就感,首选shell脚本部署学习,pipeline并不是那么麻烦。里面多半是用shell的方式搞定了,多亏自己搞了2年shell的开发。没忘记,必须前2年了解的东西确定对自己的以后的路起关键作用。ssh的公钥也在里面起到了很重要的作用,希望老铁按照我的思路可以轻松的完成部署。感谢老铁的支持,本来想2篇写在一起的,后来又拆开了,因为内容太充实了。为了搞这个每天怼到晚上2点,下班就搞不容易啊。那就拜了个拜~来不及握手!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程坑太多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境回顾
  • 本地项目部署到100上gitlab
  • 本地项目部署到101上 jenkins
  • 测试gitlab和jenkins
  • 正式编写
    • 只要push代码流水线自动开启工作,真是美滋滋啊
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档