sudo service jenkins stopCentOS7 yum安装报错“Could not resolve host: mirrorlist.centos.org;"之解决办法(换源)
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
关闭防火墙
sudo service firewalld stop
sudo systemctl disable firewalld
安装Linux相关工具
sudo yum install wget vim net-tools git java-11-openjdk* -y
- git工具:用于jenkins拉取远程代码
- java-11-openjdk*:jenkins-2.426.3-1.1版本需要jdk11及以上
maven软件包地址(旧版本)
https://archive.apache.org/dist/maven/maven-3/
配置Maven3.6.2
wget https://archive.apache.org/dist/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz
-- 解压
tar -zxf apache-maven-3.6.2-bin.tar.gz
-- 重命名
mv apache-maven-3.6.2 maven362/conf/settings.xml
-- 编辑settings.xml
vim /root/maven362/conf/settings.xml
-- 增加以下内容
-- 本地仓库地址
<localRepository>/path/to/local/repo</localRepository>
-- 在mirrors标签下配置aliyun私服镜像地址
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
-- servers标签下配置harbor镜像私服地址、账号密码
<servers>
<id>docker-harbor</id>
<username>oper</username>
<password>Passw0rd!</password>
</server>
下载jdk8,项目使用的是jdk8版本,且jenkins可以配置使用指定版本的jdk进行项目启动
进入oracle官网,登录下载
jenkins的rpm包镜像源地址
https:
下载jenkins rpm包
wget https:
安装jenkins
sudo sudo rpm -ivh /root/jenkins-2.426.3-1.1.noarch.rpm
sudo vim /usr/lib/systemd/system/jenkins.service
User=root
Group=root
Environment="JENKINS_PORT=8080"
sudo service jenkins start
sudo service jenkins stop
sudo service jenkins status
http://172.16.215.82:8080/login?from=%2F
cat /var/lib/jenkins/secrets/initialAdminPassword
1、Manage Jenkins>>Plugins>>Advanced settings(高级设置)>>Update Site(修改为:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json)
2. 更换插件源,不然下载插件会失败、很慢
cd /var/lib/jenkins/updates
sed -i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/https:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
3.插件下载
1、Chinese 中文汉化
2、Role-based Authorization Strategy 用户角色权限管理
3、Credentials Binding 相关密码凭证管理
4、git插件
5、Maven Integration 构建类型
6、pipeline 构建类型
7、publish over ssh 连接远程服务器并部署服务
8、Deploy to container 服务部署发布到远程Tomcat容器
9.nodejs
10.Email Extension 可以定制邮件模板
2429916391@qq.com
oppnjjrppjhqecja
4、重启jenkins
http://172.16.215.82:8080/restart
5、基础设置
1、Manage Jenkins>>Security>>授权策略>>选择Role-Based Strategy
2、Manage Jenkins>>Jenkins’ own user database>>新建用户
3、
Manage Jenkins>>Tools>>JDK 安装>>jdk8(/root/jdk8)
Manage Jenkins>>Tools>>Maven 安装>>maven362(/root/maven362)
4、Manage Jenkins>>System>>全局属性>>键值配置
JAVA_HOME:/root/jdk8
MAVEN_HOME:/root/maven362
PATH:$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
docker安装(23.0版本已经集成docker compose)
CentOS 7(使用 yum 进行安装)
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
安装指定版本的Docker-CE:
查找Docker-CE的版本:
安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.1panel.live"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
验证:docker version
docker-ce-23.0.0-1.el7默认去掉守护进程端口(非必要不开启)
编辑vim /lib/systemd/system/docker.service
在ExecStart增加参数: -H tcp://0.0.0.0:2375
sudo systemctl daemon-reload
sudo systemctl restart docker
curl -X GET http://172.16.215.82:2375/info
docker harbor搭建私有仓库仓库
获取安装包
wget https://github.com/goharbor/harbor/releases/download/v2.5.6/harbor-offline-installer-v2.5.6.tgz
解压
tar -zxf harbor-offline-installer-v2.5.6.tgz
进入安装目录
cd harbor
备份配置文件
cp harbor.yml.tmpl harbor.yml
编辑harbor.yml文件,harbor默认访问方式是https
1、hostname: harbor安装服务器IP
2、修改http.port=82
3、注释掉https
4、修改harbor默认登录密码
harbor_admin_password: Passw0rd!
执行 ./prepare
执行 ./install.sh
浏览器打开:http://172.16.215.82:82/
默认账号密码:admin/上面修改harbor登录密码
使用IP地址则需要在 /etc/docker/daemon.json中配置以下内容,因为 Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制
sudo vim /etc/docker/daemon.json
"insecure-registries": ["172.16.215.82:82"]
登录harbor私服
docker login -u oper -p Passw0rd! 172.16.215.82:82
在项目中标记镜像
docker tag SOURCE_IMAGE[:TAG] 172.16.215.82:82/multi-module-project/REPOSITORY[:TAG]
推送镜像到当前项目:
docker push 172.16.215.82:82/multi-module-project/REPOSITORY[:TAG]
docker pull 172.16.215.82:82/multi-module-project/registry
docker registry搭建私有仓库
使用IP地址则需要在 /etc/docker/daemon.json中配置以下内容,因为 Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制
sudo vim /etc/docker/daemon.json
"insecure-registries": ["172.16.215.82:5000"]
创建数据挂载目录
mkdir -p /root/docker/registry
-- 创建registry容器服务
docker run --name registry -d \
-p 5000:5000 --restart=always \
-v /root/docker/registry:/var/lib/registry \
registry
推送镜像到私有仓库
docker push ip:5000/session-web:latest
查看镜像
curl 127.0.0.1:5000/v2/_catalog
docker (Gogs)搭建私有代码仓库
创建数据挂载目录
mkdir -p /root/gogs
-- 创建gogs容器服务
docker run --name=gogs --restart=always -p 10022:22 -p 13000:3000 -v /root/gogs:/data -d gogs/gogs
-p 10022:22: 将容器的SSH服务端口22映射到宿主机的端口10022
-p 13000:3000: 将容器HTTP服务端口3000映射到宿主机的端口10080,可以通过浏览器访问Gogs的Web界面
jenkins使用docker部署Springboot多模块、使用harbor私服进行镜像管理
springboot多模块项目结构
multi-module-project
cuicc-dev
pom.xml
cuicc-base
pom.xml
cuicc-test
pom.xml
cuicc-parent
pom.xml
docker.sh
====================== docker.sh 内容======================
#!/bin/bash
======================cuicc-base pom.xml======================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>cuicc-base</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>com.cuicc</groupId>
<artifactId>cuicc-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../cuicc-parent</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
======================cuicc-dev pom.xml======================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>cuicc-dev</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>com.cuicc</groupId>
<artifactId>cuicc-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../cuicc-parent</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>com.cuicc</groupId>
<artifactId>cuicc-base</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}-${project.version}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<configuration>
<imageName>172.16.215.82:82/${project.top.name}/${project.artifactId}:${project.version}</imageName>
<baseImage>openjdk:8-jdk-alpine</baseImage>
<workdir>/root</workdir>
<resources>
<resource>
<targetPath>/root</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<cmd>["java", "-version"]</cmd>
<dockerHost>http://172.16.215.82:2375</dockerHost>
<entryPoint>["java","-Dfile.encoding=utf8","-jar","/root/${project.build.finalName}.jar"]</entryPoint>
<pushImage>true</pushImage>
<serverId>docker-harbor</serverId>
<registryUrl>172.16.215.82:82</registryUrl>
</configuration>
</plugin>
</plugins>
</build>
</project>
======================cuicc-test pom.xml======================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>cuicc-test</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>com.cuicc</groupId>
<artifactId>cuicc-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../cuicc-parent</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>com.cuicc</groupId>
<artifactId>cuicc-base</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}-${project.version}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<configuration>
<imageName>172.16.215.82:82/multi-module-project/${project.artifactId}:${project.version}</imageName>
<baseImage>openjdk:8-jdk-alpine</baseImage>
<workdir>/root</workdir>
<resources>
<resource>
<targetPath>/root</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<cmd>["java", "-version"]</cmd>
<dockerHost>http://172.16.215.82:2375</dockerHost>
<entryPoint>["java","-Dfile.encoding=utf8","-jar","/root/${project.build.finalName}.jar"]</entryPoint>
<pushImage>true</pushImage>
<serverId>docker-harbor</serverId>
<registryUrl>172.16.215.82:82</registryUrl>
</configuration>
</plugin>
</plugins>
</build>
</project>
======================cuicc-parent pom.xml======================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cuicc</groupId>
<artifactId>cuicc-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.12.RELEASE</spring-boot.version>
<org.projectlombok.version>1.18.30</org.projectlombok.version>
<project.top.name>multi-module-project</project.top.name>
</properties>
<modules>
<module>../cuicc-dev</module>
<module>../cuicc-test</module>
<module>../cuicc-base</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${org.projectlombok.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>${project.name}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${org.projectlombok.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<encoding>utf-8</encoding>
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
</plugin>
</plugins>
</build>
</project>
jenkins配置
========================General选项下======================
勾选:This project is parameterized
1.添加String Parameter参数
参数名称:ProjectBranch 默认值:master 描述:当前构建分支
勾选清除空白字符
2.添加Boolean Parameter
参数名称:DEV 勾选Set by Default 描述:cuicc-dev项目
3.添加Boolean Parameter
参数名称:TEST 勾选Set by Default 描述:cuicc-TEST项目
4、在高级选项里,找到显示名称:可以修改jenkins job名称
========================源码管理======================
1,输入git仓库地址
2.git仓库访问账号密码
3.指定分支,填入General选项上 $ProjectBranch即可
========================Pre Steps======================
1.选择 Add pre-build step 选择Execute shell
脚本说明:在构建前,先把远程服务器上的服务停掉,镜像删掉)
echo "" >> $WORKSPACE/docker.sh
echo "export DEV=$DEV" >> $WORKSPACE/docker.sh
echo "export TEST=$TEST" >> $WORKSPACE/docker.sh
echo "" >> $WORKSPACE/docker.sh
echo "CUICC_DEV=\`docker ps -a|grep cuicc-dev | awk '{print \$1}'\`" >> $WORKSPACE/docker.sh
echo "if [ \$DEV == "true" -a -n \$CUICC_DEV ]; then" >> $WORKSPACE/docker.sh
echo "docker stop cuicc-dev" >> $WORKSPACE/docker.sh
echo "docker rm cuicc-dev" >> $WORKSPACE/docker.sh
echo "docker rmi \`docker images | grep cuicc-dev | awk '{print \$3}'\`" >> $WORKSPACE/docker.sh
echo "echo 'cuicc-dev服务已清理'" >> $WORKSPACE/docker.sh
echo "fi" >> $WORKSPACE/docker.sh
echo "CUICC_TEST=\`docker ps -a|grep cuicc-test | awk '{print \$1}'\`" >> $WORKSPACE/docker.sh
echo "if [ \$TEST == "true" -a -n \$CUICC_TEST ]; then" >> $WORKSPACE/docker.sh
echo "docker stop cuicc-test" >> $WORKSPACE/docker.sh
echo "docker rm cuicc-test" >> $WORKSPACE/docker.sh
echo "docker rmi \`docker images | grep cuicc-test | awk '{print \$3}'\`" >> $WORKSPACE/docker.sh
echo "echo 'cuicc-test服务已清理'" >> $WORKSPACE/docker.sh
echo "fi" >> $WORKSPACE/docker.sh
2.选择 Add pre-build step 选择Send files or execute commands over SSH
1.选择SSH Server
2.Transfers >> Source files >> 填入docker.sh
3.Transfers >> Remote directory >> 填入/(跟目录)
4.Transfers >> Exec command >> (docker.sh文件上传成功之后,在远程服务器上执行的命令)
chmod +x /root/docker.sh
/bin/bash -c /root/docker.sh
3.选择 Add pre-build step 选择Execute shell
脚本说明:开始构建项目,生成镜像文件、并上传到私服,同时把服务启动的脚本统一在docker.sh中执行
echo "#!/bin/bash" > $WORKSPACE/docker.sh
echo "" >> $WORKSPACE/docker.sh
mvn clean install -DskipTests -f cuicc-parent/pom.xml
if [ $DEV == "true" ]; then
echo "开始构建cuicc-dev项目"
mvn -DskipTests docker:build -f cuicc-dev/pom.xml
echo 'echo "开始执行cuicc-dev服务"' >> $WORKSPACE/docker.sh
echo "docker run --name cuicc-dev -p 8081:8081 --restart=always -d 172.16.215.82:82/multi-module-project/cuicc-dev:1.0-SNAPSHOT" >> $WORKSPACE/docker.sh
fi
if [ $TEST == "true" ]; then
echo "开始构建cuicc-test项目"
mvn -DskipTests docker:build -f cuicc-test/pom.xml
echo 'echo "开始执行cuicc-test服务"' >> $WORKSPACE/docker.sh
echo "docker run --name cuicc-test -p 8082:8082 --restart=always -d 172.16.215.82:82/multi-module-project/cuicc-test:1.0-SNAPSHOT" >> $WORKSPACE/docker.sh
fi
========================Build======================
1.Root POM是必填的,如果是多模块的话,需要指定统一依赖管理的pom.xml,这里我的是cuicc-parent/pom.xml
========================Post Steps======================
1.选择Run only if build succeeds
2.添加 Add post-build step 选择Execute shell >> 选择Send files or execute commands over SSH
3.选择SSH Server
4.Transfers >> Source files >> 填入docker.sh
5.Transfers >> Remote directory >> 填入/(跟目录)
6.Transfers >> Exec command >> (docker.sh文件上传成功之后,在远程服务器上执行的命令)
chmod +x /root/docker.sh
/bin/bash -c /root/docker.sh