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: jenkinsrestart: alwaysports:- '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: postgrescontainer_name: dbports:- 5432:5432networks:- sonarnetenvironment:POSTGRES_USER: sonarPOSTGRES_PASSWORD: sonarsonarqube:image: sonarqube:8.9.6-communitycontainer_name: sonarqubedepends_on:- dbports:- 9000:9000networks:- sonarnetenvironment:SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonarSONAR_JDBC_USERNAME: sonarSONAR_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-scannercat >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
EOFmv 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" != "" ] ; thenecho "正在刪除${project}容器"#docker stop $containerIddocker rm -f $containerId
fi
tag=`docker images | grep ${project} | awk '{print $2}'`
echo $tag
if [[ "$tag" =~ "$version" ]] ; thendocker 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