集锦One 安装Jenkins(jdk和maven 这里就不演示了)
https://pkg.jenkins.io/redhat-stable/
第一条命令:
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
第二条命令:
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
注意:这条命令是没有反应的
第三条命令:
yum install -y jenkins
这里是执行成功的
假如执行之后提示如下:
这种情况需要升级下
yum upgrade
等待完成重新执行上面的三个命令就可以了
修改配置文件 启动端口和主机地址
vi /etc/sysconfig/jenkins
第一步修改启动用户为 root
第二步 端口修改(看个人我这里修改为 8099)
下面直接启动jenkins
systemctl start jenkins
注意:这里修改的端口记得去防火墙放开
sudo firewall-cmd --zone=public --add-port=8099/tcp --permanent
刷新生效
sudo firewall-cmd --reload
复制上面的命令 查看密码:
cat /var/lib/jenkins/secrets/initialAdminPassword
进来之后我们先创建一个用户
安装插件
先替换插件地址
替换地址
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
然后在 地址后面输入一个 restart 进行重启
下面安装第一个插件 (汉化插件 Chinese)
安装完成后重启
第二插件 凭证管理 (Credentials Binding)
安装完成就会出现下面这个(方便我们存储一些账号密码)
进来先创建一个 gitee上拉取代码的凭证
安装第三个插件 Git
配置 jdk 和 maven 地址 以及全局配置(maven 的安装和 jdk的安装就不多少了主要说下配置)
系统是CentOs7 的所以配置环境变量
vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_131
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
然后保存退出 (注意这里的地址是你的安装地址)
测试:
环境变量配置成功!!
去jenkins里 全局配置 jdk 和 maven
这里输入jdk的安装目录也就是刚才配置的环境变量,把下面的自动安装去掉
继续配置maven
下面去 系统配置
添加环境变量
最好就是这样配置 这里是自己的地址
JAVA_HOME /usr/java/jdk1.8.0_131
M2_HOME /opt/maven
PATH+EXTRA $M2_HOME/bin
第三个插件 Pipeline(未付基于流水线项目)
添加两个参数化构建的插件 (第一个 Git Parameter直接在gitee获取分支用的。
第二个 复选框插件因为是微服务架构 Extended Choice Parameter )
创建一个 流水线项目
第一步 选择参数化构建 Git Parameter(这个插件装了之后)构建时动态获取分支
第二步设置 继续添加参数化构建 Extended Choice Parameter 多模块同时构建
第三步 去构建脚本 (点进去生成脚本)
往下来直接生成
将生成的脚本复制出来
这里我们需要改一个地方 上面我们参数化构建了一个 branch 分支 这样我们就能构建自己需要构建的分支。
选择需要的分支进行构建
这边成功拉取代码
因为我这边有一个公共模块 需要提前打包 下面是我的项目结构
我们继续 执行下一个步骤 (打包公共模块)
执行构建 公共模块打包成功
构建微服务 使用我们上面添加的 project_name
第一个坑来了 一直提示找不到 复工程 以及公共模块
原因是因为本地仓库没有复工程的包
需要在本地maven中找到这个文件夹放到服务器的maven com包下
这个是我们需要上传的文件夹结构
上传到目录下
再次打包构建
这个服务是打包成功了 其他的微服务就不一一演示了
下面我们来制作docker插件来制作镜像
在各个启动服务的模块添加打包插件的依赖
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- 构建docker的镜像-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.7</version>
<configuration>
<repository>${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
同时在每个模块中创建Dockerfile
FROM openjdk:8-jdk-alpine //构建java的环境
ARG JAR_FILE //插件指定大jar地址
COPY ${JAR_FILE} app.jar //把我们 打包的jar 复制到app.jar
EXPOSE 8080 //启动端口
ENTRYPOINT ["java","-jar","/app.jar","--spring.profiles.active=prod"]
注意:这里每个微服务都可以不用改 因为每个容器是独立的 所以是可以直接给每个微服务复制(手动偷懒)
好了我们改下脚本 在打包命令后加上
sh "mvn -f ${projectInfo} clean package -Dmaven.test.skip=true dockerfile:build"
镜像制作成功
docker images 就能看到我们制作的镜像
下面我们就往 harbor 镜像库推送 镜像
安装habor的记录我整理在了另一片中 :https://blog.csdn.net/weixin_44695125/article/details/123141266?spm=1001.2014.3001.5501
首先我们去 凭证里面添加 harbor凭证 在流水线语法中
//这样的好处是不用暴露 密码账号
withCredentials([usernamePassword(credentialsId: 'b7894006-e02d-4777-972b-df0d1d338d6a', passwordVariable: 'password', usernameVariable: 'username')]) {
// some block
}
我们整个脚本
node{
stage('clone'){
checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: '318f9f3a-7aea-4304-81a1-2a70c65d12c0', url: 'https://gitee.com/xkmayun/bugvip.git']]]) }
stage("打包公共模块"){
sh "mvn -f bugvip-common clean install -Dmaven.test.skip=true"
}
def selectedProjectNames="${project_name}".split(",")
def tag= "latest"
//harbor地址
def harbor_url="101.34.81.9:85"
//镜像库的名称
def harbor_project="bugvip"
//harbor凭证
def harbor_auth="42d57c52-0e29-4a76-b6ea-d9d36dc2de9b"
stage('编译微服务'){
for(int i =0;i<selectedProjectNames.length;i++){
def projectInfo=selectedProjectNames[i];
//获取项目名称
sh "mvn -f ${projectInfo} clean package -Dmaven.test.skip=true dockerfile:build"
//定义镜像名称
def imageName="${projectInfo}:${tag}"
//对镜像打上标签
sh "docker tag ${imageName} ${harbor_url}/${harbor_project}/${imageName}"
//把镜像推送到 harbor
withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
// // //登录harbor
sh "docker login -u ${username} -p ${password} ${harbor_url}"
// //镜像上传
sh "docker push ${harbor_url}/${harbor_project}/${imageName}"
sh "echo 镜像上传成功"
}
}
}
}
第一个坑来了 登录 报错
在jenkins 所在的服务器目录 vim /etc/docker/daemon.json 下
添加
{“insecure-registries”:[“填你的harbor服务器地址”]}
systemctl restart docker 重启docker 重新构建打包
上传成功
下面我们在其他的地方拉取下镜像
执行拉取命令 docker pull 101.34.81.9:85/bugvip/bugvip_third_part:latest
成功拉取。。。。。。。。。。。。。
关于脚本远程 目标服务器拉取镜像并创建docker (可以看我下面这篇文章)https://blog.csdn.net/weixin_44695125/article/details/123240642
😁😁😁