jenkins应用2-freestyle-job

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

9.开始构建

8构建结果验证

1.代码质量检测

2.查看容器是否正常运行

相关推荐
TG:@yunlaoda360 云老大39 分钟前
华为云国际站代理商CSBS主要有什么作用呢?
运维·服务器·数据库·华为云
像名字一样难取的昵称2 小时前
Linux学习笔记:十八、Linux文件的压缩,解压缩一站式学习
linux·运维·笔记·学习·ubuntu·ssh
Trouvaille ~3 小时前
【Linux】库制作与原理(二):ELF格式与静态链接原理
linux·运维·c语言·操作系统·动静态库·静态链接·elf文件
写代码的橘子n3 小时前
IPV6复习(基础入手版)
运维·服务器·网络
ICT技术最前线3 小时前
H3C双WAN口策略路由配置技术教程
运维·网络·h3c·策略路由
一分半心动3 小时前
windows docker desktop 安装VibeVoice
运维·docker·容器
向日葵.4 小时前
中间件交接文档
linux·运维·服务器
LucidX4 小时前
Docker核心操作实战
运维·docker·容器
隔壁阿布都4 小时前
Docker Compose中的网络管理
运维·docker·容器
云和数据.ChenGuang4 小时前
运维工程师技术教程之Pull Requests(PR)
运维·分布式·git·数据库运维工程师·运维教程