一.环境配置
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. 建立启动脚本
4. 启动服务
chmod 755 oper.sh
./oper.sh start
d) 浏览器访问访问及初始化
1. 查看文件内容 /opt/j-stg/data/secrets/initialAdminPassword 输入到管理员密码字段处
cat /opt/j-stg/data/secrets/initialAdminPassword
2. 输入文件内容后点击继续,选择插件的安装
等待一段时间后,插件可以自动安装完成,如果安装失败,可以初始完成后在进行安装配置。
3. 创建管理员账号,
4. 进行实例配置
5. 初始化完成,点击开始使用Jenkins .
e) 建立凭证信息
点击【凭证】=>【Jenkins】=>【全局凭证】=>【添加凭证】
注: 1. 类型可以根据实际进行选择,这里选择用户/密码验证类型
2. 范围可以选择 全局类型 和 系统类型
3. username/password 需要记住,在增加slave 节点时候进行验证
(2) Slave 从节点配置(linux节点配置说明)
进入【系统管理】=>【管理节点】=>【新建节点】=>【输入节点名称,选择固定节点】
【点击ok】=>【出现如下界面进行设置】=>【点击保存】
【点击节点列表】=>【出现如下界面,对节点进行查看】
二.Jenkins master全局配置:
1. 系统设置
【点击 系统管理】=>【系统设置】
a) 管理监控配置
b) 设置邮件发送账号配置
c) 设置邮件通知
d) ant 服务配置
e) SonarQube 服务配置
f) Xcode Builder 配置
2. 全局工具配置
【系统管理】=>【全局工具配置】
a) Jdk 配置设置
1. 指定版本自动安装
2. 在构建节点手动安装后,进行手动设置
3.在手动设置完JDK,后可以对每个节点进行自定义配置
b) Maven 配置
c) SonarQube 扫描器安装配置
三. 构建任务配置
1. 构建任务
a) 点击【新建任务】
b)
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 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 } } else { rvstr = '服务器启动失败' } def body = """ # \${JELLY_SCRIPT,template="html"} # \${BUILD_URL}console # 访问路径: $rvstr """ emailext body: body, subject: '$JOB_NAME', to: '[email protected]' } } // 部署失败后执行阶段 failure { emailext body: ''' # ${JELLY_SCRIPT,template="html"} # ${BUILD_URL}console ''', subject: '${JOB_NAME}_Build_error', to: '[email protected]' } } } d) 触发模式 1. 手动触发构建 2. 定时触发构建 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) 设置中文 b) 设置令牌Token [配置] => [权限] => [点击令牌] => 生成令牌 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
'