本文已参与「新人创作礼」活动,一起开启掘金创作之路。
集锦One 安装Jenkins(jdk和maven 这里就不演示了)
pkg.jenkins.io/redhat-stab…
第一条命令:
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的记录我整理在了另一片中 :blog.csdn.net/weixin_4469…
首先我们去 凭证里面添加 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 (可以看我下面这篇文章)blog.csdn.net/weixin_4469…
:grin::grin::grin: