前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Jenkins+Ansible+GitLab持续交付平台搭建-第7篇

Jenkins+Ansible+GitLab持续交付平台搭建-第7篇

作者头像
TestOps
发布2022-04-07 13:02:04
发布2022-04-07 13:02:04
94500
代码可运行
举报
文章被收录于专栏:TestOps云层TestOps云层
运行总次数:0
代码可运行

这篇文章将继续给大家介绍Jenkins+Ansible+GitLab持续交付平台搭建。

Jenkins+Ansible+GitLab持续交付平台搭建-第1篇

Jenkins+Ansible+GitLab持续交付平台搭建-第2篇

Jenkins+Ansible+GitLab持续交付平台搭建-第3篇

Jenkins+Ansible+GitLab持续交付平台搭建-第4篇

Jenkins+Ansible+GitLab持续交付平台搭建-第5篇

Jenkins+Ansible+GitLab持续交付平台搭建-第6篇

Jenkins,ansible,gitlab三剑客

Freestyle job案例

三剑客环境搭建

###搭建平台

代码语言:javascript
代码运行次数:0
运行
复制
# ssh root@172.16.87.89
# su - deploy
$ source /home/deploy/.py3-a2.5-env/bin/activate

###加载py3虚拟环境
$ source /home/deploy/.py3-a2.5-env/ansible/hacking/env-setup -q

##验证ansible是否已经加载成功
$ ansible --version

到此三剑客平台已经就绪

##创建freetyle-job工程

#描述:This is my frist nginx job

#参数化构建过程

选择参数:

名称:deploy_env

选择:dev&test&prod

文本参数:

名称:branch

默认值:master

源代码管理:GitLab项目仓库url/仓库密码

##创建Ansible与目标主机ssh key公钥认证

编写playbook脚本实现静态网页远程部署

编写playbooks脚本

nginx_playbooks/ ----->脚本目标

├── deploy.retry

├── deploy.yml --->主入口文件

├── inventory ---->详细目标

│ ├── dev

│ └── prod

└── roles ---->主任务文件

└── nginx

├── files

│ ├── health_check.sh

│ └── index.html

├── tasks

│ └── main.yml --->ansible-playbook主任务文件

└── templates

└── nginx.conf.j2

6 directories, 8 files

将playbook部署脚本提交到Gitllab仓库
代码语言:javascript
代码运行次数:0
运行
复制
##将GitLab仓库代码克隆到本地
# git -c  http.sslverify=false clone https://gitlab.example.com/root/ansible-playbooks.git

##上传代码
# git add .

##提交,注释提交内容
# git commit -m "First commit"
# git -c http.sslverify=false  push origin master   或git push origin master
Freestyle任务构建和自动化部署
shell脚本
代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/sh
set +x
source /home/deploy/.py3-a2.5-env/bin/activate
source /home/deploy/.py3-a2.5-env/ansible/hacking/env-setup -q

cd $WORKSPACE/nginx_playbooks
ansible --version
ansible-playbook --version

ansible-playbook -i inventory/$deploy_env ./deploy.yml -e project=nginx -e branch=$branch -e env=$deploy_env

jenkins pipeline job案例

###pipeline job实现:nginx+mysql+php+WordPress自动化部署交付

预先搭建环境:

1.三剑客平台初始化环境构建

2.编写ansible playbook脚本实现WordPress远程部署工作

3.将WordPress源码与playbook部署脚本提交到GitLab仓库

4.编写pipeline job脚本实现jenkins流水线持续交付流程

5.jenkins集成ansible与GitLab实现WordPress的自动化部署

代码语言:javascript
代码运行次数:0
运行
复制
##ssh链接jenkins后台服务器
# ssh root@172.16.87.89
# su -deploy
$ source /home/deploy/.py3-a2.5-env/bin/activate

###加载py3虚拟环境
$ source /home/deploy/.py3-a2.5-env/ansible/hacking/env-setup -q

##验证ansible是否已经加载成功
$ ansible --version

##验证ansible环境是否免秘钥远程登录目标服务器
# ssh root@report.example.com(目标服务器DNS)

##编写ansible playbook脚本
##打开Git Bash在本地编写脚本

###为了避免克隆或者推送GitLab仓库时报证书错误,关闭Git安全认证
### git config --global http.sslverify fales
# git -c  http.sslverify=false clone https://gitlab.example.com/root/ansible-playbooks.git

# cd ansible-playbooks/
# cp -a nginx_playbooks/  wordpress_playbooks

# 编写本地wordpressss_playbooks脚本

wls案例

##Freestyle job+GitLab+ansible+weblogic

1.环境准备

GitLab代码仓库托管服务器172.16.87.88(本地DNSgitlab.example.com)

ansible+jenkins持续构建集成服务器172.16.87.89

weblogic服务器:172.16.87.105

2.创建一个自由风格流水线job,命名项目名称规则

项目名称:report

参数化构建过程:

选项参数名称deploy_env

选项:dev、test、prod

文本参数名称:branch

默认值master

源码托管Git

项目仓库Url地址https://gitlab.example.com/root/report2.git

构建:Maven

执行shell:

代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/sh
set +x
#su - deploy
source /home/deploy/.py3-a2.5-env/bin/activate
source /home/deploy/.py3-a2.5-env/ansible/hacking/env-setup -q

cd /home/deploy
ansible --version
ansible-playbook --version

cd playbook
#cp /home/deploy/.jenkins/workspace/report2.0/portal/target/portal.war roles/testbox/files/
ansible-playbook -i inventory/testenv ./deploy.yml

##jenkins启动停止脚本

代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/bash
DEPLOY_UID=1000
java -jar /opt/jenkins.war   >> $log_path/home/deploy/apache.log 2>&1 &

if [ "$UID" -eq "${DEPLOY_UID}" ]
then
echo "Message: deploy jenkins  has started. "
echo
else
echo
echo "Message: You are not the weblogic user, execute the command with deploy user."
echo
fi
代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/bash
DEPLOY_UID=1000
ps -aux | grep jenkins | grep java |awk '{print $2}'|xargs kill  >> $log_path/home/deploy/apache.log
if [ "$UID" -eq "${DEPLOY_UID}" ]
then
echo "Message: The log file apache.log does not exis"
echo
else
echo
echo "Message: You are not the weblogic user, execute the command with deploy user."
echo
fi

3.Ansib脚本编写

📎playbook.zip

代码语言:javascript
代码运行次数:0
运行
复制
- name: print server name and user to remste testbox
  shell: "echo 'Currently {{ user }} is logining {{ server_name }}' > {{ output }}"

#- name: create a file
#  file: 'path=/root/foo.txt state=touch mode=0755 owner=root group=root'
#- name: "kill掉weblogic"
#  shell: "ps -ef  | grep weblogic | grep -v grep | awk '{print $2}' |xargs kill -9"

- name: "删除老版本的war&文件"
  shell: "rm -rf {{ war_file }}/123.txt"

- name: copy a file
  copy: 'remote_src=no src=roles/testbox/files/portal.war dest={{ war_file }}/portal.war mode=0644 force=yes'

#- name: start weblogic service
#  shell: "nohup {{ service }}/startWebLogic.sh &"

- name: "查看weblogic请求判断 weblogic service starts"
  shell: echo $(ps -ef | grep weblogic | wc -l)
  register: 'weblogic_stat'
- debug: msg="weblogic_stat"
  when: weblogic_stat.stdout |int >= 2
- name: copy a file
  copy: 'remote_src=no src=roles/testbox/files/stopwls.sh dest=/root/stopwls.sh mode=0777 force=yes'
- name: "source profile && 卸载应用"
  shell: "source /etc/profile && sh /root/stopwls.sh"
- name: "source profile && 装载应用"
  shell: "source /etc/profile && sh /root/startwls.sh"

#- name: "卸载部署应用"
#  script: 'sh /home/wls.sh'
#  register: script_stat
#- debug: msg="foo.sh exists"
#  when: script_stat.stat.exists
#- name: run the script
#  command:  "sh /root/foo.sh"
代码语言:javascript
代码运行次数:0
运行
复制
[testservers]
report.example.com

[testservers:vars]
server_name= report.example.com
user=root
output=/root/weblogic_state.txt
service=/home/weblogic/Middleware/Oracle_Home/user_projects/domains/base_domain/bin
war_file=/root

#server_name=report.example.com
port=80
user=deploy
worker_processes=4
max_open_file=65505
root=/www

jenkins与SonarQube平台代码扫描

SonarQube安装

SonarQube安装

1.环境准备

sonarQube 下载地址https://www.sonarqube.org/downloads/(官网最新版本下载特别慢,可选择其他版本下载)

sonarQube Scanners 下载地址https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner

安装jdk1.8(根据官网信息,需要用到jdk1.8,如果你的环境已经配置了JAVA_HOME是jdk1.7可以手动指定sonar的运行jdk为1.8)

安装mysql,可以是远程连接(注:mysql版本需要是5.6+)

2.安装

指定jdk1.8(如果系统环境变量已经是1.8忽略此步)

下载好sonarQube后,解压打开conf目录,修改 wrapper.conf

代码语言:javascript
代码运行次数:0
运行
复制
##jdk配置
# tar -zxvf jdk-8u77-linux-x64.tar.gz -C /usr/java/

#配置root用户java环境变量
# vi ~/.bashrc
export JAVA_HOME=/usr/java/jdk1.8.0_77
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

##使环境变量立即生效
# source  ~/.bashrc

##解压sonarqube-7.4.zip
# unzip sonarqube-7.4.zip

##创建用户启动es
# adduser deploy
# chown -R deploy:deploy sonarqube

#配置deploy用户的java环境变量(172.16.87.85未配置deploy环境变量)

代码语言:javascript
代码运行次数:0
运行
复制
# vi ~/.bashrc
###set sonar java ###
export JAVA_HOME=/usr/java/jdk1.8.0_77
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# source  ~/.bashrc

##mysql安装(Cenos7)

代码语言:javascript
代码运行次数:0
运行
复制
 ##下载并安装MySQL官方的 Yum Repository
 # wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

 ##yum 安装Yum Repository
 # yum -y install mysql57-community-release-el7-10.noarch.rpm

 ##安装mysql服务器
# yum -y install mysql-community-server

###mysql数据库设置

代码语言:javascript
代码运行次数:0
运行
复制
##启动mysql
# systemctl start  mysqld.service

#查看mysql运行状态
# systemctl status mysqld.service

##在log中查看root密码
#grep "password" /var/log/mysqld.log

##登录
mysql> mysql -uroot -p

##修改mysql密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';(注修改不成功的话,查看grep "password" /var/log/mysqld.log按照那里面密码修改)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '.+i=ikbkb8aU';

##查看mysql初始化密码规则
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;

###最后卸载删除Yum Repository,避免以后每次操作yum的自动更新
# yum -y remove mysql57-community-release-el7-10.noarch

3.SonarQube配置

###mysql 添加sonar用户

sonarQube配置mysql,修改/conf/sonar.properties

重启服务,观察日志

##配置sonarqube目标conf下的sonar.properties

$ vim sonarqube/conf/sonar.properties

##配置wrapper.conf文件

$ vim sonarqube/conf/sonar.properties

wrapper.java.command=/usr/java/jdk1.8.0_77/bin/java

##创建sonar数据库

# mysql -u sonar -p

Enter password:

mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;

mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';

mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';

mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';

mysql> FLUSH PRIVILEGES;

###启动启动sonar

# su - sonar

# ./bin/linux-x86-64/sonar.sh start

# tail -200f ./logs/sonar.log

##访问http://172.16.87.85:9000

##http://172.16.87.85:9000/about

##mysql查看sonar数据库信息状态

mysql> show databases

mysql> use sonar;

mysql> show tables;

##配置sonarqube-7.4启动脚本

代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/bash
DEPLOY_UID=1001
./sonarqube-7.4//bin/linux-x86-64/sonar.sh start    >> $log_path/home/deploy/sonar.log 2>&1 &
if [ "$UID" -eq "${DEPLOY_UID}" ]
then
echo "Message: deploy SonarQube  has started. "
echo
else
echo
echo "Message: You are not the deploy user, execute the command with deploy user."
echo
fi

4. SonarQube汉化

下载sonar-l10n-zh-plugin-1.21.jar 放在/opt/sonarqube/extensions/plugins目标下,重新启动sonarqube(注意jar包组权限)

或者是在SonarQube平台安装中文插件--->配置-->Plugins-->搜索-->chinese

https://blog.csdn.net/qq_21816375/article/details/80787993

Sonar-scanner扫描器安装配置

(root用户配置其他用户执行须配置java环境变量)

Sonar通过扫描器进行代码质量分析,即扫描器的具体工作就是扫描代码:

代码语言:javascript
代码运行次数:0
运行
复制
###解压sonar-scanner-3.2.0.1227-linux
# su - root
# cd /opt

# 编辑/conf下的sonar-scanner.properties文件
# cd /opt/sonar-scanner-3.2.0.1227-linux/conf
# grep "^[a-Z]" sonar-scanner.properties
sonar.host.url=http://localhost:9000
sonar.sourceEncoding=UTF-8
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
onar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.login=admin
sonar.password=admin

##配置sonar-scanner-3.2环境变量

代码语言:javascript
代码运行次数:0
运行
复制
 # vi ~/.bashrc

###set sonar-scanner###
export SONAR_RUNNER_HOME=/opt/sonar-scanner-3.2.0.1227-linux
export PATH=$SONAR_RUNNER_HOME/bin:$PATH
export SONAR_SCANNER_OPTS="-Xms512m -Xmx2048m"

# source  ~/.bashrc

##测试sonar-scanner环境变量
# sonar-scanner -h

###安装apache-maven

下载:wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.zip

# unzip apache-maven-3.6.0-bin.zip

验证maven版本:# ./apache-maven-3.6.0/bin/mvn -version

###在项目的根目录中创建配置文件:sonar -project.properties

代码语言:javascript
代码运行次数:0
运行
复制
sonar.projectKey=report(项目的唯一标识,类似主键自定义)
sonar.projectVersion=1.0.0(项目的版本)
sonar.sources=.
sonar.projectName=report(项目名称)
sonar.ce.workCount=1
sonar.language=java(项目编码)
sonar.source=src(项目路径)
sonar.java.binaries=/opt/report/report/src,/opt/report/portal/src,/opt/report/krm-sso/src,/opt/report/krm-common/src
sonar.sourceEncoding=UTF-8
sonar.ce.javaOpts=-Xms=512 -Xmx=2048 -XX:+HeapDumpOnOutOfMenonyError
代码语言:javascript
代码运行次数:0
运行
复制
# must be unique in a given SonarQube instance
sonar.projectKey=report
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
#sonar.projectName=My project #项目名称
sonar.projectVersion=1.0.0

# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set.
sonar.sources=.

# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8

# Encoding of the source code. Default is default is defasonar.ce.javaOpts= -Xmx=2560 -Xms=853 -XX:+HeapDumpOnOutOfMenonyError

sonar.projectName=report
sonar.ce.workCount=1
sonar.language=java
sonar.source=src
sonar.java.binaries=/opt/report/report/src,/opt/report/portal/src,/opt/report/krm-sso/src,/opt/report/krm-common/src
sonar.sourceEncoding=UTF-8
sonar.ce.javaOpts=-Xms=512 -Xmx=2048 -XX:+HeapDumpOnOutOfMenonyError


##suona  Qpu 的服务器
##代码扫描 suona sigai 特
SonarQube代码扫描

###从项目基目录运行以下命令以启动分析:

1.手动执行分析(在项目根目标中操作)

# /opt/apache-maven-3.5.4/bin/mvn clean package

2.cd 进入report到项目根目标(在项目文件中操作)

# sonar-scanner

Java堆空间错误或java.lang.OutOfMemoryError故障:通过SONAR_SCANNER_OPTS环境变量增加内存:

https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner

export SONAR_SCANNER_OPTS="-Xmx512m"

##FindBugs配置

https://blog.csdn.net/aya19880214/article/details/41958445

SonarQube扫描小案例

https://github.com/SonarSource/sonar-scanning-examples

https://blog.csdn.net/aya19880214/article/details/41958445

平台集成

https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Jenkins

SonarQube扫描规则自定义

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

本文分享自 TestOps 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Jenkins,ansible,gitlab三剑客
    • Freestyle job案例
      • 三剑客环境搭建
      • 编写playbook脚本实现静态网页远程部署
      • 将playbook部署脚本提交到Gitllab仓库
      • Freestyle任务构建和自动化部署
      • shell脚本
    • jenkins pipeline job案例
      • 预先搭建环境:
    • wls案例
  • jenkins与SonarQube平台代码扫描
    • SonarQube安装
      • SonarQube安装
      • Sonar-scanner扫描器安装配置
      • SonarQube代码扫描
    • 平台集成
    • SonarQube扫描规则自定义
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档