1.拉取镜像
docker pull jenkins/jenkins
拉取了jenkins 的最新版本
2.查看版本
docker inspect 镜像id
3.创建jenkins 挂载文件夹:
mkdir /opt/jenkins/jenkins_home
4.安装jenkins 需要用到的软件
yum install wget (已安装则跳过)
jdk:
下载jdk17压缩包并解压至/usr/local/jdk/
JAVA_HOME= /usr/local/jdk/jdk17
git:
源码安装
wget --no-check-certificate https://www.kernel.org/pub/software/scm/git/git-2.25.1.tar.gz
安装依赖包:
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker -y
创建目录:
mkdir /usr/local/git/git-2.25.1
tar -zxvf git-2.25.1.tar.gz
cd git-2.25.1
./configure --prefix=/usr/local/git/git-2.25.1 && make install
增加环境变量
GIT_HOME=/usr/local/git/git-2.25.1
PATH=$PATH:$GIT_HOME/bin
设置生效,校验版本来确定安装成功
source /etc/profile
git --version
nexus:
docker安装私服:
# 【1】 安装镜像
docker search nexus3
docker pull docker.io/sonatype/nexus3
# 【2】 创建数据持久化目录
sudo mkdir -p /opt/nexus/data
sudo chmod 777 /opt/nexus/data
# 【3】 启动
#!/bin/bash
docker stop nexus;
docker rm nexus;
docker run -d \
-p 9300:8081 \
--name nexus \
--restart=always \
-v /opt/nexus/data:/var/nexus-data \
--privileged=true \
sonatype/nexus3
# 【4】 获取nexus初始化 admin 的密码
docker exec -it nexus3 /bin/bash
cd nexus-data/
#复制密码为: bash单词前,复制登录后提示你重置密码
cat admin.password
# 【5】 登录使用。账号是 admin 密码是上一步获取的,如果一直转圈可能是私服启动比较慢,要等待一会。
http://ip:9300(我启动映射端口是 9300,ip当然是你服务器ip
maven:
下载
wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
解压缩至/usr/local/maven目录
MAVEN_HOME=/usr/local/maven/maven3
maven仓库地址为
/usr/local/maven/repo
配置maven setting.xml文件:
<!-- 本地仓库存放地址 -->
<localRepository>/usr/local/maven/repo</localRepository>
<mirrors>
<!-- nexus start -->
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<name>Nexus name</name>
<!-- 复制nexus中的maven-public url -->
<url>http://ip:9300/repository/maven-public/</url>
</mirror>
<!-- nexus end -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
<mirror>
<id>google-maven-central</id>
<name>Google Maven Central</name>
<url>https://maven-central.storage.googleapis.com</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<servers>
<server>
<id>releases</id>
<!-- nexus中的账号密码 -->
<username>admin</username>
<password>1234</password>
</server>
<server>
<id>snapshots</id>
<!-- nexus中的账号密码 -->
<username>admin</username>
<password>1234</password>
</server>
</servers>
<!-- 在settings.xml里把这个group加上设置白名单 -->
<pluginGroups>
<pluginGroups>
<pluginGroup>com.spotify</pluginGroup>
</pluginGroups>
</pluginGroups>
注意:如果以上配置中没有加入group白名单,执行 mvn package docker:build 可能会报以下错误:
gitlab
jenkins:
# 【1】 下载jenkins镜像
docker pull jenkins/jenkins:lts
# 【2】 创建并授权安装目录
sudo mkdir -p /opt/jenkins
sudo chmod 777 /opt/jenkins
#docker路径授权
sudo chmod 777 /var/run/docker.sock
# 【3】 建立脚本启动jenkins
#!/bin/bash
docker stop jenkins;
docker rm jenkins;
docker run -d \
-p 9100:8080 \
-p 9101:50000 \
--restart=always \
--name jenkins \
-u root \
-v /etc/localtime:/etc/localtime \
-v /opt/jenkins/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/local/maven/maven3:/usr/local/maven \
-v /usr/local/maven/repo:/usr/local/maven/repo \
-v /usr/local/jdk/jdk17:/usr/local/java/jdk \
-v /usr/local/git/git-2.25.1:/usr/local/git \
-v /etc/sysconfig/docker:/etc/sysconfig/docker \
-v /usr/bin/docker-current:/usr/bin/docker \
--privileged=true \
jenkins/jenkins
注意!!!
如果docker是用yum install 下载的,版本较低,所以docker的执行文件挂载路径是
-v /usr/bin/docker-current:/usr/bin/docker \
如果是通过源码安装下载的,版本较高的
-v /usr/bin/docker:/usr/bin/docker \
这条在进行安装自定义jar包镜像时有用
# 【4】 进入配置文件,配置加速
cd /opt/jenkins/jenkins_home
vi hudson.model.UpdateCenter.xml
# 配置地址如下,可拷贝地址粘贴对应位置即可
<sites>
<site>
<id>default</id>
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
</site>
</sites>
# 【5】 登录获取初始化密码路径。登录如:http://ip:port/
# cat 上一步管理平台上得到的路径,获取初始化的admin登录密码
docker exec -it jenkins /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword
# 拷贝cat后获取的密码,输入密码登录。
# 【6】执行安装,选择安装推荐插件。等待安装成功
5.jenkins软件进行插件安装,全局配置
5.部署springboot项目jar包,以docker镜像的形式进行发布
笔者的springboot项目是父子结构,即
|--my-springboot-project
pom.xml
|---controller
pom.xml
|----service
pom.xml
|----dao
pom.xml
主要执行结构在controller中,也只要controller的jar包进行镜像的安装
1).在my-springboot-project下新建Dockerfile文件,无后缀
# 基础镜像使用java
FROM openjdk:17.0.2-jdk
# 指定作者
MAINTAINER root
# 将jar包添加到容器中并更名
ADD controller/target/controller-1.0-SNAPSHOT.jar myapi.jar
#设置语言
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar"," myapi .jar"]
# 暴露 8080 端口作为微服务
EXPOSE 8080
2).在父pom文件中加入nexus配置
<repositories>
<repository>
<id>nexus</id>
<name>test public</name>
<layout>default</layout>
<!-- 复制nexus中的maven-public url -->
<url>http://36.139.115.199:9300/repository/maven-public/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
3).配置jenkins中的项目
调用顶层 Maven 目标:
clean install -U -e -B -Dmaven.test.skip=true -Pprod
执行shell
#!/bin/sh
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
echo "开始产生jar包镜像"
#接收外部参数
name='myapi'
# 定义应用版本
version='1.0-SNAPSHOT'
#查询容器是否存在,存在则删除
containerId=`docker ps -a | grep -w ${name} | awk '{print $1}'`
if [ "$containerId" != "" ] ; then
#停掉容器
docker stop $containerId
#删除容器
docker rm $containerId
echo "成功删除容器"
fi
#查询镜像是否存在,存在则删除
imageId=`docker images | grep -w ${name} | awk '{print $3}'`
if [ "$imageId" != "" ] ; then
#删除镜像
docker rmi -f $imageId
echo "成功删除镜像"
fi
# 打包编译docker镜像
docker build -t ${name} .
echo "镜像编译成功"
# docker push ${name}
echo "镜像推送成功"
# 启动容器,由于我springboot项目是8080端口
docker run -itd -p 8080:8080 --restart=always --name ${name} ${name}
echo "容器启动成功"
echo "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
4).编译并解决问题
在启动编译过程中报错 xxxxlib.10 文件不存在。
拷贝宿主机中的文件到容器中,步骤
①查询宿主机中的该文件
find / -name xxxxlib.10
一般为软链接
②将软链接实际对象拷贝到docker容器中,一般都是后缀版本不同
docker cp xxxxlib. 1.0.8 jenkins:/usr/lib/
③ 建立软链接
进入docker容器
docker exec -it jenkins /bin/bash
ln -s xxxxlib. 1.0.8 xxxxlib.10
chmod +x xxxxlib.10