docker安装Jenkins、jenkins插件、映射JDK和maven和RSA、publish over ssh发布
首先需要安装JDK,这里不演示了需要安装docker下载jenkinssudo docker pull jenkins创建jenkins文件夹mkdir /app/jenkins启动jenkins注意,我这里一直是root用户为了防止权限问题,我使用了 -u 0sudo docker run -d -p 8080:8080 -p 50000:50000 -...
一、宿主机准备
1.宿主机首先需要安装JDK,这里不演示了
2.宿主机需要安装docker,这里不演示了
二、安装jenkins及其插件并运行jenkins容器
1.下载jenkins
其他版本可以看https://hub.docker.com/
我之前就是docker pull jenkins下载的官方最新镜像,结果也只是2.60.3版本的,安装后很多插件无法安装,直接在jenkins界面点击升级jenkins后无法启动了
后来决定不用官方镜像,使用:
docker pull jenkins/jenkins:lts
查看镜像
docker images | grep jenkins
查看该镜像中jenkins的版本
docker inspect 1920bf702d7d
这个镜像里面的Jenkins是2.263.1版本的
2.创建jenkins文件夹
mkdir /app/jenkins
3.启动jenkins
注意,我这里一直是root用户
为了防止权限问题,我使用了 -u 0
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true -v /app/jenkins:/var/jenkins_home -u 0 jenkins/jenkins:lts
4.查看运行状态
docker ps
这表示成功启动
5.配置镜像加速
进入 cd /app/jenkins/ 目录
修改 vi hudson.model.UpdateCenter.xml里的内容
修改前
将 url 修改为 清华大学官方镜像:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
修改后
6.在浏览器访问并安装jenkins插件
http://172.20.10.8:8080
1.首次访问需要在该界面中输入管理员密码
由于我们启动的时候设置了文件夹挂载,我们直接可以在本地jenkins目录下查看密码
cat /app/jenkins/secrets/initialAdminPassword
如果没有设置挂载,查看密码的方式
docker exec jenkins/jenkins:lts cat /var/jenkins_home/secrets/initialAdminPassword
2.安装插件
可以安装推荐的插件,也能自定义
如果安装失败请看这篇https://www.cnblogs.com/miaokmm/p/11789119.html
建议常用的插件要安装:
https://www.cnblogs.com/zhanglianghhh/archive/2018/10/11/9770529.html
这里另外安装几个插件
Maven Integration
GitLab
Ansible
SaltStack
Parameterized Trigger
Build Pipeline
Publish Over SSH
3.创建用户
这里我只是测试,所有的账号密码都是设置的root
4.完成
其他常用命令
查看日志
docker logs jenkins
关闭容器
docker stop jenkins
删除容器
docker rm -v jenkins
三、jenkins容器内部安装jdk和maven、映射SSH
1.安装jdk
其实不用去jenkins容器里面安装jdk,就在宿主机安装(已经安装了),然后jenkins容器启动的时候把宿主机的jdk路径挂载进jenkins的容器中就行了,maven安装同理。
2.安装maven
其实不用去jenkins容器里面安装maven,就在宿主机安装,然后jenkins容器启动的时候把宿主机的maven路径挂载进jenkins的容器中就行了
宿主机安装maven
创建文件夹
mkdir -p /app/maven
下载安装包
cd /app/maven
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
解压
tar -zxvf apache-maven-3.6.3-bin.tar.gz
修改配置文件settings.xml,使用了阿里云的Maven仓库 (可选)
cd /app/maven/apache-maven-3.6.3/conf
vi settings.xml
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
添加环境变量
vi /etc/profile
export M2_HOME=/app/maven/apache-maven-3.6.3
export PATH=$PATH:${M2_HOME}/bin
source /etc/profile
验证是否安装成功
mvn -version
3.启动jenkins容器的时候挂载宿主机上JDK和MAVEN的路径
如果本来jenkins容器就启动起的需要docker stop jenkins docker rm jenkins然后
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true -v /app/jenkins:/var/jenkins_home -v /app/maven/apache-maven-3.6.3:/usr/local/maven -u 0 jenkins/jenkins:lts
4.jenkins界面配置maven和jdk路径
本来宿主机就安装了JDK,直接在启动jenkins容器的时候映射上去
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true -v /app/jenkins:/var/jenkins_home -v /app/maven/apache-maven-3.6.3:/usr/local/maven -v /app/java/jdk1.8.0_221:/usr/local/java -u 0 jenkins/jenkins:lts
5.把宿主机的SSH映射到docker里面的jenkins的ssh
宿主机已经生成了RSA密钥
这里记得把自己的id_rsa.pub里面的内容加入到authorized_keys里面
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true --restart=always -v /app/jenkins:/var/jenkins_home -v /app/maven/apache-maven-3.6.3:/usr/local/maven -v /app/java/jdk1.8.0_221:/usr/local/java -v /root/.ssh:/root/.ssh -u 0 jenkins/jenkins:lts
6.配置publish over ssh
系统管理--系统配置
这里是设置jenkins自己的RSA私钥地址和私钥内容
这里是设置jenkins会访问(推送jar包到)什么机器的IP,用户名,推送路径。
注意:这个Remote Directory是个根目录,要跟后面job里面的配置结合起来用
举例:将文件war包 拷贝到远程主机的 /usr/local 目录下
可以有两种写法
1. jenkins SSH 中的Remote Derictory 配置为 /usr/
Jenkins 配置中Post-build Actions步骤 中的Remote Derictory 配置为 local
或者
2. jenkins SSH 中的Remote Derictory 配置为 /
Jenkins 配置中Post-build Actions步骤 中的Remote Derictory 配置为 /usr/local
四、jenkins配置关联gitlab及创建项目发布springboot项目
1.配置jenkins使用http方式拉去gitlab上的代码
这里的账号密码就是填写访问gitlab用的账号密码
2.新建job,使用publish over ssh发布
这里的目的是建立一个job,是用publicsh over ssh发布。
效果是Jenkins用publish over ssh把service1.jar 推送到node1上,把service2.jar推送到node2上,把service3.jar推送到node3上。
并且在node1 node2 node3上分别发布service1.jar service2.jar service3.jar
配置
这里的repository URL去gitlab上复制你要的项目的
而cerdentials就是第一步创建的用于访问gitlab的账号密码
这里配置的意思就是构建好了jar包后,jenkins把jar包推送到node1机器上,并且在node1机器执行启动运行deploy_service1.sh发布文件
参数说明
Name:
“系统管理>系统设置”设置的SSH Sverver的名字列表。
Source files:
复制到运程机上的文件,相对workspace的路径,也支持表达式,如上图中的“**/*.war”。
Remove prefix:
文件复制时要过滤的目录,如上图中的target目录。
Remote directory:
文件得到到远程机上的目录,此目录是相对于“SSH Server”中的“Remote directory”的,如果不存在将会自动创建。
Exec command:
在这里可以填写在运程机器上执行的脚本
deploy_service1.sh发布文件是先就传到Node1的指定目录里面了,其实可以写在项目里面,这里用publish over ssh拷贝过去也行
内容
#!/bin/bash
tomcat_pid=`lsof -n -P -t -i:8095`
[ -n "$tomcat_pid" ] && kill -9 $tomcat_pid
sleep 5
nohup /app/java/jdk1.8.0_221/bin/java -jar /app/deploy/service1-1.0-SNAPSHOT.jar >> service1.log 2>&1 &
这个脚本是返回占用8095端口的进程ID,然后kill -9杀掉该进程,在启动新的进程。
这里注意,不知道为什么读不到java_home,java -jar的时候这个jave要写全路径,否则启动不起来。还有请先确认该机器又lsof命令,不然该脚本无法杀死占用8095端口的进程
把service2.jar推送到Node2上并且使用node2 /app/deploy上已有的deploy_service2.sh脚本启动service2.jar
deploy_service2.sh脚本内容是
#!/bin/bash
tomcat_pid=`lsof -n -P -t -i:8096`
[ -n "$tomcat_pid" ] && kill -9 $tomcat_pid
sleep 5
nohup /app/java/jdk1.8.0_221/bin/java -jar /app/deploy/service2-1.0-SNAPSHOT.jar >> service2.log 2>&1 &
把service3.jar推送到Node3上并且使用node3 /app/deploy上已有的deploy_service3.sh脚本启动service3.jar
deploy_service3.sh脚本内容是
#!/bin/bash
tomcat_pid=`lsof -n -P -t -i:8097`
[ -n "$tomcat_pid" ] && kill -9 $tomcat_pid
sleep 5
nohup /app/java/jdk1.8.0_221/bin/java -jar /app/deploy/service3-1.0-SNAPSHOT.jar >> service3.log 2>&1 &
保存
点击构建
启动成功以后访问一下node1
访问一下node2
172.20.10.9:8096/service2/test/select
访问一下node3
172.20.10.10:8097/service3/test/select
更多推荐
所有评论(0)