1.jenkins应用
1.jenkins构建的流程
1.使用git参数化构建,用标签区分版本
2.git 拉取gitlab远程仓库代码
3.maven打包项目
4.sonarqube经行代码质量检测
5.自定义制作镜像发送到远程仓库harbor
6.在远程服务器上拉取代码启动容器
这个是构建的整个过程和步骤,需要安装好gitlab,jenkins 、harbor、sonarqube
2jenkins用到的软件及环境配置
上一章讲述了gitlab 和jenkins的容器化搭建,接着将Jenkins容器使用docker
docker 的进程/run/docker.sock 共享给jenkins使用,默认docker.sock 的属主是root,属组是docker,
#1修改docker权限
chown root:root /run/docker.sock #修改属主和属组
chmod o+rwx /run/docker.sock #增加权限
#2添加harbor仓库
cat >/etc/docker/daemon.json<<EOF
{
"insecure-registries": ["http://192.168.88.121:80"] #指定远程仓库,后边使用改成harbor的#IP和端口
}
EOF
systemctl restart docker #重启docker生效
#3.配置jenkins使用docker
cat >/usr/local/docker/jenkins_docker/docker-compose.yaml<<EOF
version: '3.1'
services:
jenkins:
image: "jenkins/jenkins:2.387.3-lts"
container_name: jenkins
restart: always
ports:
- '8080:8080'
- '50000:50000'
volumes:
- './data:/var/jenkins_home/'
- '/var/run/docker.sock:/var/run/docker.sock' #共享docker
- '/usr/bin/docker:/usr/bin/docker' #添加docker到bin直接使用命令
- '/etc/docker/daemon.json:/etc/docker/daemon.json' #共享远程仓库
EOF
cd /usr/local/docker/jenkins_docker/
docker compose -f /usr/local/docker/jenkins_docker/docker-compose.yaml up -d #重新创建jenkins
3.harbor仓库搭建
1.harbor软件下载与配置
wget -t 0 -c https://github.com/goharbor/harbor/releases/download/v2.0.5/harbor-offline-installer-v2.0.5.tgz
#harbor的配置,默认用户名admin,密码Harbor12345
#配置完harbor后,登录到harbor,创建目录repo
#!/bin/bash
tar -xf harbor-offline-installer-v2.0.5.tgz
cd harbor/
cp harbor.yml.tmpl harbor.yml
sed -i '/^hostname/s,reg.mydomain.com,192.168.88.121,' harbor.yml #指定harbor的IP地址
sed -i '/^https:/s,^,#,' harbor.yml
sed -i '/port: 443/s,^,#,' harbor.yml
sed -i '/ certificate/s,^,#,' harbor.yml
sed -i '/private_key/s,^,#,' harbor.yml
sudo curl -L "https://github.com/docker/compose/releases/download/1.18.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
./install.sh #安装harbor
cd ../
http://192.168.88.121:80
harbor的配置,默认用户名admin,密码Harbor12345
配置完harbor后,登录到harbor,创建目录repo,公开
4.sonarqube下载原装
1.sonarqube采用容器部署
mkdir /usr/local/docker/sonarqube_docker
cd /usr/local/docker/sonarqube_docker
cat >docker-compose.yaml<<EOF
version: '3.1'
services:
db:
image: postgres
container_name: db
ports:
- 5432:5432
networks:
- sonarnet
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
sonarqube:
image: sonarqube:8.9.6-community
container_name: sonarqube
depends_on:
- db
ports:
- 9000:9000
networks:
- sonarnet
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
networks:
sonarnet:
driver: bridge
EOF
grep -i 'vm.max_map_count' /etc/sysctl.conf
[ $? -eq 0 ] || sed -i '$a vm.max_map_count=262144 ' /etc/sysctl.conf #不配置会报错
sysctl -p
docker compose -f docker-compose.yaml up -d
#localhost:9000
#sonarqube默认用户名和密码都是admin
http://localhost:9000
2.sonarqube默认用户名和密码都是admin ,进去后会提示修改密码
3.保存好tocker,jenkins验证用到
5.sonar-sconner下载配置到jenkins
SonarScanner CLI (sonarsource.com)
1下载sonar-scanner-cli-4.6.0.2311-linux.zip
2.conf/sonar-scanner.properties配置
#!/bin/bash
unzip ~/sonar-scanner-cli-4.6.0.2311-linux.zip
mv sonar-scanner-4.6.0.2311-linux/ sonar-scanner
cat >sonar-scanner/conf/sonar-scanner.properties <<EOF
#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here
#----- Default SonarQube server
sonar.host.url=http://192.168.88.121:9000 #指定IP及单口
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
EOF
mv sonar-scanne /usr/local/docker/jenkins_docker/data/ #放入到jenins目录下,和JDK、maven一样
6jenkins登录进去
1、插件安装sonar
2.sonar-scanner全局变量配置
3.sonar-scanner系统配置
7项目构建
1新建项目test
2.git参数化构建
3.2个文本参数构建
4.git拉取代码
5.清空之前的workspace及切换标签版本
6.maven打包
7sonar代码质量检测
sonar.projectname=${JOB_NAME} #指定项目名
sonar.projectKey=${JOB_NAME} #指定Key
sonar.source=./ #在当前目录对代码检测
sonar.java.binaries=target/ #jar包
7.制作镜像并上传到远程仓库harbor
mv target/*.jar docker/
cd docker/
docker build -t ${JOB_NAME}:$tag ./
docker login -u admin -p Harbor12345 192.168.88.121:80
docker tag ${JOB_NAME}:$tag 192.168.88.121:80/repo/${JOB_NAME}:$tag
docker push 192.168.88.121:80/repo/${JOB_NAME}:$tag
8.构建后在远程服务器下载镜像启动容器进行测试
#1.在远程服务器执行的shell命令
docker.sh 192.168.88.121:80 repo ${JOB_NAME} $tag $container_port $host_port
#2.脚本docke.sh 在远程服务器/usr/local/bin/docker.sh
cat >/usr/local/bin/docker.sh<<EOF
#!/bin/bash
horbar_addr=$1 #harbor镜像地址及端口
horbar_repo=$2 #镜像所在的目录为repo
project=$3 #项目名称所谓镜像名
version=$4 #项目版本所闻镜像版本
container_port=$5 #容器内使用的端口
host_port=$6 #宿主机使用的端口
imageName=$horbar_addr/$horbar_repo/$project:$version #镜像的地址及镜像名和版本
echo $imageName
containerId=`docker ps -a | awk '{print $1, $NF}' | grep $project | awk '{print $1}'` #删除当前正在运行的容器
echo $containerId
if [ "$containerId" != "" ] ; then
echo "正在删除${project}容器"
#docker stop $containerId
docker rm -f $containerId
fi
tag=`docker images | grep ${project} | awk '{print $2}'`
echo $tag
if [[ "$tag" =~ "$version" ]] ; then
docker rmi -f $imageName
fi
docker login -u admin -p Harbor12345 $horbar_addr
docker pull $imageName #下载镜像
docker run -d -p $host_port:$container_port --name $project $imageName #启动测试容器
echo "${project}容器创建成功"
echo "SUCCESS"
EOF