jenkins创建项目 发布docker
jenkins官网下载地址前提需要jdk、git、maven等环境在Win10上运行下载的安装包,找到安装位置直接 start jenkins.exe在docker上边运行jenkinsdocker run -itd -p 8080:8080 -p 50000:50000 --name jenkins -v /home/jenkins_home:/var/jenkins_home:rwjenkin
jenkins官网下载地址
linux下载页面
linux中
#直接启动jenkins 这样启动会在/root/.jenkins 下生成jenkins的文件目录
nohup java -jar jenkins.war --httpPort=8099 >/dev/null 2>&1 &
或是通过
service jenkins start
存放jenkins插件、配置以及所有项目文件目录 /root/.jenkins
存放jenkins的war包目录 /usr/lib/jenkins
jenkins端口地址存放目录 /etc/sysconfig
前提需要jdk、git、maven等环境
在Win10上运行下载的安装包,找到安装位置直接 start jenkins.exe
也可以自定义Dockerfile 和 docker-compose.yml
根据实际情况来编辑自己的docker文件
FROM jenkins/jenkins:2.319.1-lts
COPY ./opt/maven3.6 /opt/maven3.6
执行 docker build -t jenkins:1 .
version: '3'
services:
jenkins:
image: 'jenkins:1'
build: .
container_name: jenkins
restart: always
ports:
- '8099:8080'
- '50000:50000'
volumes:
- /home/dockerjenkis/jenkins_home:/var/jenkins_home:rw
- /home/dockerjenkis:/home:rw
- /home/dockerjenkis/profile:/etc/profile:rw
或是直接在docker上边运行jenkins
docker run -itd -p 8080:8080 -p 50000:50000 --name jenkins -v /home/jenkins_home:/var/jenkins_home:rw jenkins/jenkins:2.319.1-lts
查看jenkins是否运行
docker ps -a
如果没有运行,我们可以查看报错信息
docker logs
本人遇到的错误有这个
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
#这个是因为权限不够,我们直接把挂在的目录增加权限
chown -R 1000 /home/jenkins_home
#重新jenkins
docker start
部署运行配置好开放的端口和登录用户账号密码
1.输入一开始设置的账号密码
jenkins的系统配置
2.配置jenkins的全局属性
3.maven配置文件
4.jdk的配置文件
5.git的安装地址
6.配置maven文件地址
7.进入jenkins部署自由风格
8.项目描述
9.git地址和git的账号密码
10.在打开页面输入git的账号密码
11.输入maven打包命令
12.点击执行流水线
13.查看控制台的打印信息
14.使用流水线发布项目
可以使用参数化构建
请注意 使用jenkins构建项目 在jenkins构建项目完成后会杀死所有的子进程,所以不能直接在流水线上java -jar 这样会导致项目直接被杀死
解决方法: JENKINS_NODE_COOKIE=dontkillme java -jar
pipeline {
agent any
stages {
stage('pull project') {
steps {
echo '准备拉取代码'
checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'ebd014ce-d71d-438d-1851-31f93eb56ea4', url: 'https://gitee.com/xxxxxxxxx/javaApplication.git']]])
echo '代码拉取成功'
}
}
stage('使用maven打包') {
steps {
sh '''
pwd
mvn -pl ${name} -am clean package -Dmaven.test.skip=true'''
}
}
stage('运行 jar 包') {
steps {
sh '''cd ${name}/target
pwd
pid=`ps -ef | grep -w ${name} | grep -v grep | grep -v /bin/bash | awk \'{print $2}\'`
jar=`ls -ll | grep -w ${name} | grep -v original | awk \'{print $9}\'`
if [[ -n ${pid} ]]
then
kill -9 ${pid}
else
echo "未找到该服务"
fi
echo "即将重启 ${name} 服务"
JENKINS_NODE_COOKIE=dontkillme nohup java -jar ${jar} >/dev/null 2>&1 &
echo "运行成功!"
'''
}
}
}
}
同样我们可以在我们的java项目的根目录里增加一个Jenkinsfile的文件,文件内容就是我们上边的流水线执行代码,然后选择流水线执行方式
可以设置各种触发器,例如我选中的这种,直接是通过浏览器或其他地方调用就可以触发构建
jenkins + docker + docker-compose发布项目
- 我的jenkins构建后项目在/root/.jenkins下边
- 我的Dockerfile、docker-compose.yml、各种脚本文件在/home/projects下边
编辑shell —> entrypoint.sh 脚本
#!/bin/sh
exec java ${JAVA_OPTS} -jar javaApplication.jar "$@"
编辑 jenkins构建命令
pipeline {
agent any
stages {
stage('pull project') {
steps {
echo '准备拉取代码'
checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'ebd014ce-d71f-438d-485q-31f93eb56ea4', url: 'https://gitee.com/xxxxxxxx/javaApplication.git']]])
echo '代码拉取成功'
}
}
stage('build project准备') {
steps {
echo '准备打包项目'
sh 'mvn clean package -Dmaven.test.skip=true'
echo '项目打包成功'
sh 'pwd'
echo '项目地址'
}
}
stage('删除容器') {
steps {
sh '''containerId=`docker ps -a | grep javaapplication | awk \'{print $1}\'`
echo "容器id : " ${containerId}
if [[ -n ${containerId} ]]
then
docker rm -f ${containerId}
echo "容器已退出"
else
echo "暂无启动容器"
fi
'''
}
}
stage('docker制作镜像') {
steps {
sh '''contanerId=`docker images | grep -w javaapplication | grep -v / | awk \'{print $3}\'`
cd /home/projects
rm -rf *.jar
cp /root/.jenkins/workspace/java_pipeline/target/*.jar /home/projects
if [[ -n ${contanerId} ]]
then
docker rmi -f ${contanerId}
echo "镜像已删除"
else
echo "暂无该镜像"
fi
cat << EOF > Dockerfile
FROM java:8
WORKDIR /home
ENV JAVA_OPTS="-Xmx500m -Xms500m"
COPY entrypoint.sh entrypoint.sh
RUN chmod 755 entrypoint.sh
COPY javaApplication.jar javaApplication.jar
ENTRYPOINT ["./entrypoint.sh"]
'''
}
}
stage('制作docker-compose.yml') {
steps {
sh '''
cd /home/projects
docker build -t javaapplication:1 .
echo "镜像制作成功"
cat << EOF > docker-compose.yml
version: "3"
services:
java:
build: .
container_name: javaapplication
image: javaapplication:1
ports:
- 8083:8083
volumes:
- /home/projects:/home:rw
environment:
- JAVA_OPTS=-Xms512m -Xmx512m -XX:+UseParallelOldGC
'''
}
}
stage('使用docker-compose发布镜像') {
steps {
sh '''
cd /home/projects
docker-compose up -d
runId=`docker ps | grep javaapplication | awk \'{print $1}\'`
if [[ -n ${runId} ]]
then
echo "容器启动成功"
else
echo "容器启动失败"
fi'''
}
}
}
}
或者直接将docker的作为一个流水线的一个整体编写
pipeline {
agent any
stages {
stage('从Git上拉取项目') {
steps {
echo "准备拉取项目"
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'ebd014ce-d71f-438d-9851-31f93eb56ea4', url: 'https://gitee.com/XXXXXXX/javaApplication.git']]])
echo "项目拉取成功"
}
}
stage('使用maven打包项目') {
steps {
sh 'mvn clean package -Dmaven.test.skip=true'
}
}
stage('使用docker-compose发布项目') {
steps {
sh '''containerId=`docker ps -a | grep -w javaapplication | grep -v / | awk \'{print $1}\'`
if [[ -n ${containerId} ]]
then
docker rm -f ${containerId}
echo 容器删除成功
else
echo 没有正在运行的容器
fi
imageId=`docker images | grep -w javaapplication | grep -v / | awk \'{print $3}\'`
if [[ -n ${imageId} ]]
then
docker rmi -f ${imageId}
echo 镜像删除成功
else
echo 没有这个镜像
fi
cd /home/projects
rm -rf *.jar
cp /root/.jenkins/workspace/springbootProject/target/*.jar /home/projects/
cat << EOF > Dockerfile
FROM java:8
WORKDIR /home
ENV JAVA_OPTS="-Xms500m -Xmx500"
COPY javaApplication.jar javaApplication.jar
ENTRYPOINT ["sh","-c","java -jar \\${JAVA_OPTS} javaApplication.jar "]
EOF
docker build -f Dockerfile -t javaapplication:1 .
cat << EOF > docker-compose.yml
version: "3"
services:
javaapplication:
image: javaapplication:1
container_name: javaapplication
build: .
ports:
- 8083:8083
volumes:
- /home/projects:/home:rw
environment:
- JAVA_OPTS=-Xms512m -Xmx512m
EOF
docker-compose up -d'''
}
}
}
}
使用 docker images 命令查看发布的镜像
使用 docker ps -a 命令查看运行的容器
更多推荐
所有评论(0)