一.环境配置

Linux 环境安装配置(需要先安装配置java 环境)

1.              Jenkins 主节点安装配置

a)       下载Jenkins war 包

访问 https://jenkins.io/download/ 进行下载jenkins 的安装包

b)      安装配置方式说明

1)       直接放在tomcat webapps 目录下,启动tomcat 即可。

2)       命令行启动

                java -DJENKINS_HOME=/tmp -jar jenkins.war --httpPort=8433 --prefix=/dev 

         # JENKIINS_HOME 指定数据存放目录

                # httpPort 指定监听端口

         # prefix 指定访问URI

c)       命令行启动配置

 

1. 新建目录 /opt/j-stg

   mkdir -p /opt/j-stg

               2. 把jenkins.war 包直接复制到/opt/j-stg 目录下

                  cp Jenkins.war /opt/j-stg

                   3. 建立启动脚本

spacer.gif

     4. 启动服务

          chmod 755 oper.sh

      ./oper.sh start

d)  浏览器访问访问及初始化

 

1. 查看文件内容 /opt/j-stg/data/secrets/initialAdminPassword 输入到管理员密码字段处

cat /opt/j-stg/data/secrets/initialAdminPassword

spacer.gif

2. 输入文件内容后点击继续,选择插件的安装

spacer.gif

spacer.gif

    等待一段时间后,插件可以自动安装完成,如果安装失败,可以初始完成后在进行安装配置。

3. 创建管理员账号,

spacer.gif

4. 进行实例配置

spacer.gif

 

 

 

 

 

 

 

5. 初始化完成,点击开始使用Jenkins .

spacer.gif

spacer.gif

e) 建立凭证信息

点击【凭证】=>【Jenkins】=>【全局凭证】=>【添加凭证】

 

        注: 1. 类型可以根据实际进行选择,这里选择用户/密码验证类型

          2. 范围可以选择 全局类型 和 系统类型

                 3.  username/password 需要记住,在增加slave 节点时候进行验证

                 

spacer.gif

 

(2)  Slave 从节点配置(linux节点配置说明)

                  进入【系统管理】=>【管理节点】=>【新建节点】=>【输入节点名称,选择固定节点】

               spacer.gif

           【点击ok】=>【出现如下界面进行设置】=>【点击保存】

spacer.gif

【点击节点列表】=>【出现如下界面,对节点进行查看】

spacer.gif

 

 

二.Jenkins master全局配置:

1. 系统设置

【点击 系统管理】=>【系统设置】

a)       管理监控配置

spacer.gif

b)      设置邮件发送账号配置

spacer.gif

spacer.gif

    

c)       设置邮件通知

spacer.gif

d)      ant 服务配置

spacer.gif

e)       SonarQube 服务配置

spacer.gif

 

 

f)        Xcode Builder 配置

spacer.gif

2. 全局工具配置

       【系统管理】=>【全局工具配置】

a)       Jdk 配置设置

1. 指定版本自动安装

spacer.gif

2. 在构建节点手动安装后,进行手动设置

spacer.gif

3.在手动设置完JDK,后可以对每个节点进行自定义配置

spacer.gif

spacer.gif

 

b)      Maven 配置

spacer.gif

 

        c) SonarQube 扫描器安装配置

          spacer.gif

 

三. 构建任务配置

     1. 构建任务

a)       点击【新建任务】

spacer.gif

b)       

spacer.gif

c)       Jenkins pipeline 脚本范例

pipeline {

    // 设置编译节点选择

    agent { label '192.168.8.106'}

    // 设置脚本全局变量

    environment {

            r_ftp_user='jenkins_read'

            r_ftp_passwd='testp’'

            w_ftp_user='jenkins'

            w_ftp_passwd='p_aaa '

           

            ftp="10.200.130.19/jenkins_test"

            zipfile="${JOB_NAME}.zip"

           

            sonar = tool 'sonar1';

            tomcat='/opt/app/tomcat-8'

    }  

    tools {maven 'maven3'

           jdk 'jdk1'

    }

    // 具体pipeline 执行步骤配置

    stages {

        //  检出代码配置

        stage('checkout code '){

                steps {

                  git branch: 'dev', credentialsId: '678b2319-7345-4d3e-8738-b6ac7bf32d1d', url: 'git@gitlab/api.git'

                }

            }

         // 编译 和 SonarQube 检查

        stage('Build && SonarQube analysis') {

            steps {

                 sh """

                    mvn clean install -Dmaven.test.skip=true

                    rm -rf *.zip

                    cd target

                    zip -qry ../$zipfile api-1.0/*

                    cd ..

                """

               

                withSonarQubeEnv('SonarQube7.3') {

                    sh "$sonar/bin/sonar-scanner -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.projectKey=$env.JOB_NAME -Dsonar.projectName=$env.JOB_NAME -Dsonar.projectVersion=1.0 -Dsonar.sources=src -Dsonar.java.binaries=target/classes"

                    }

                }

            }

        // 编译产出文件上传ftp  和对本任务其他阶段节点共享配置

        stage('上传ftp zipfile'){

            steps {

              

               sh "lftp -c 'open ${w_ftp_user}:${w_ftp_passwd}@$ftp && mkdir -p ${JOB_NAME}/$BUILD_NUMBER && cd  ${JOB_NAME}/$BUILD_NUMBER && put $zipfile'"

               stash includes: "$zipfile", name: "$zipfile"

            }

        }

        //实际部署阶段

        stage('deploycode'){

            // 并发配置设置

            parallel {

                stage("server105"){

                    // 节点选择

                    agent { label "192.168.8.105"}

                    // 在选择节点部署代码

                    steps{

                        unstash "$zipfile"

                        sh """

                        sudo su -c 'cd $tomcat/bin/ &&./shutdown.sh;

                                    cd ../webapps && rm -rf ./*;

                                    mv $WORKSPACE/$zipfile .;

                                    unzip $zipfile;

                                    cd ..;

                                    ./bin/catalina.sh start'

                       

                        """

                      }

                }

                stage("server107"){

                    // 节点选择

                    agent { label '192.168.8.107'}

                    

                    steps {

                        unstash "$zipfile"

                        sh """

                        sudo su -c 'cd $tomcat/bin/ &&./shutdown.sh;

                                    cd ../webapps && rm -rf ./*;

                                    mv $WORKSPACE/$zipfile .;

                                    unzip $zipfile;

                                    cd ..;

                                    ./bin/catalina.sh start'

                        """

                    }

                }

            }

        }

    }

    // 部署结果处理阶段

    post{

        // 部署结果成功后执行阶段

        success {

            sleep 10   

            script {

                  def node = ['192.168.8.105','192.168.8.107']

                  def rvnode = []

                

                  for (int i=0; i<node.size(); i++){

                     aa = sh returnStatus: true, script:"""

                             curl -I http://${node[i]}:8080 ;

                         """

                     sh "echo rvcode= $aa"    

                     if ( aa == 0 ) {

                         rvnode.add(node[i])

                     }

                  }

              

                def rvstr = '' 

                if (rvnode != []){

                    for (int i=0;i< rvnode.size();i++){

                         rvstr+='http://' + rvnode[i] + ':8080<br />'

                    } 

                } else {

                    rvstr = '服务器启动失败'

                } 

                def body = """

                #  \${JELLY_SCRIPT,template="html"} <br/>

            #  \${BUILD_URL}console <br/>

            #  访问路径:

            $rvstr

               

                """

                emailext body: body, subject: '$JOB_NAME', to: 'suwnoevo@163.com'

            } 

        } 

        // 部署失败后执行阶段

        failure {

            emailext body: '''

        #  ${JELLY_SCRIPT,template="html"} <br/>

        #  ${BUILD_URL}console <br/>

        ''', subject: '${JOB_NAME}_Build_error', to: 'suwnoevo@163.com'

      

        }

       

    }

}

       d) 触发模式

         1. 手动触发构建

         2. 定时触发构建

                 spacer.gif

         3. webhook触发构建

四. SonarQube Server 服务配置

1. SonarQube安装

# 下载地址:

# wget –o /usr/local/src/https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-7.3.zip

# cd /usr/local/src && unzip sonarqube-7.3.zip

# mv sonarqube-7.3.zip /opt/app/sonarqube

# useradd sonar

# cd /opt/app/sonarqube

# cat conf/sonar.properties                   # 配置文件更具需要进行更改

# su sonar

# cd bin/linux-x86-64/

# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

# rpm -ivh mysql-community-release-el7-5.noarch.rpm

# yum -y install mysql mysql-server mysql-devel

# systemctl  enable mysqld

# systemctl  start mysqld

# db 初始化

> create database sonar character set utf8 collate utf8_general_ci;

> grant all privileges on sonar.* to 'sonar'@'192.168.8.%' identified by 'sonar‘;

> flush privileges;

 

2. 服务配置及启动

 [root@centos73-106 conf]# cat sonar.properties | grep ^[a-z]

sonar.jdbc.username=sonar

sonar.jdbc.password=sonar

sonar.login=admin

sonar.password=admin

sonar.jdbc.url=jdbc:mysql://192.168.8.108:3306/sonar?useUnicode=true&characterEncoding=utf8 \

                       &rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

sonar.web.javaOpts=-Xmx512m –Xms512m -XX:+HeapDumpOnOutOfMemoryError

sonar.web.host=0.0.0.0

sonar.web.port=9000

sonar.web.http.maxThreads=50

sonar.web.http.minThreads=5

# useradd sonar

# cd /opt/app/sonarqube

# chown –R sonar.sonar /opt/app/sonarqube

# su soner

$ ./sonar.sh  start                  # 使用普通用户 启动sonar server 服务

 

3. SonarQube 使用设置

       a) 设置中文

spacer.gif

 

b) 设置令牌Token

[配置] => [权限] => [点击令牌] => 生成令牌

spacer.gif

 

4. 扫描测试:

   ./bin/sonar-scanner -Dsonar.host.url=http://192.168.8.106:9000 

-Dsonar.projectKey=test -Dsonar.projectName=test

-Dsonar.projectVersion=1.0 -Dsonar.sources=src

-Dsonar.java.binaries=target/classes

-Dsonar.login=SONAR_AUTH_TOKEN

 

# Jenkisn pipeline sonar scan 常用参数

 -Dsonar.host.url=$SONAR_HOST_URL

 -Dsonar.login=$SONAR_AUTH_TOKEN