赞
踩
目录
3.2 jenkins设置环境变量JDK、MAVEN、全局变量
5.1 bash: mvn: command not found
5.2 构建失败nohup: failed to run command 'java': No such file or directory
5.4 java找不到主属性问题 大坑!!!更改pom.xml文件
5.6 The container name “/jenkins-app” is already in use by container
5.8 Jenkins安装插件出现Signature verification failed in update site 'default' (show details),插件无法下载
比较长比较复杂,需要一点点运维基础,但基本把jenkins该踩的坑都踩老,创建一个springboot项目并上传gitee:创建第一个Springboot项目HelloWorld-CSDN博客
不想创建也可以直接克隆我的公开项目,然后再上传至你自己的gitee
springboot项目地址:
https://gitee.com/luo_guibin/demo_springboot.git
jdk:11.0.23
jdk所有版本下载地址:Java Archive | Oracle
maven:3.9.7
maven下载地址:Maven – Download Apache Maven
docker:18.09.9/docker版本无要求(jenkins使用docker部署)
jenkins:2.401(docker pull jenkins/jenkins:2.401命令拉取不了,以下链接可以下载镜像tar包,docker pull 无法下载jenkins制定版本,挂梯子也不行,不用尝试,直接用我的就行,有其他方法获取到2.4以上的版本都行)
!此处不要使用jenkins/jenkins或者jenkins镜像,前者表面上是最新镜像,我镜像源设置的是阿里云地址,其实阿里镜像好久没更新jenkins版本,实际版本为2.328(该版本不支持下载chinese插件,谨慎选择),后者则是远古版本,不要选择,两个都挂着latest最新版,实际老到不行......
- #jenkins:2.401
- 链接:https://pan.baidu.com/s/1xDsJaixmy2Eg0uyAe94U1A?pwd=1234
- 提取码:1234
- #将tar文件加载为docker镜像
- docker load -i *****.tar
jdk安装包放在/opt下
- [root@localhost opt]# pwd
- /opt
- [root@localhost opt]# ls
- apache-maven-3.9.7-bin.tar.gz jdk-11.0.23_linux-x64_bin.tar.gz
- [root@localhost opt]# tar -zxvf jdk-11.0.23_linux-x64_bin.tar.gz
- [root@localhost opt]# mkdir /usr/local/java
- [root@localhost opt]# mv jdk-11.0.23 /usr/local/java/
- [root@localhost opt]# vim /etc/profile
-
- #########添加环境变量
- export JAVA_HOME=/usr/local/java/jdk-11.0.23
- export PATH=$PATH:${JAVA_HOME}/bin
- #########
-
- [root@localhost opt]# source /etc/profile
- [root@localhost opt]# java -version
- java version "11.0.23" 2024-04-16 LTS
- Java(TM) SE Runtime Environment 18.9 (build 11.0.23+7-LTS-222)
- Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.23+7-LTS-222, mixed mode)
maven安装包放在/opt下
- [root@localhost opt]# ls
- apache-maven-3.9.7-bin.tar.gz jdk-11.0.23_linux-x64_bin.tar.gz
- [root@localhost apache-maven-3.9.7]# tar -zxvf apache-maven-3.9.7-bin.tar.gz
- [root@localhost opt]# mv apache-maven-3.9.7 /usr/local/
- [root@localhost opt]# cd /usr/local/apache-maven-3.9.7/
- [root@localhost apache-maven-3.9.7]# ls
- bin boot conf lib LICENSE NOTICE README.txt
-
- #######创建名为ck的仓库文件夹
- [root@localhost apache-maven-3.9.7]# mkdir /usr/local/apache-maven-3.9.7/ck
- [root@localhost apache-maven-3.9.7]# vim /usr/local/apache-maven-3.9.7/conf/settings.xml
-
- #######更改maven配置文件,1 添加仓库,2 新增阿里云镜像源
- <localRepository>/usr/local/apache-maven-3.9.1/ck</localRepository>
-
- <mirror>
- <id>alimaven</id>
- <name>aliyun maven</name>
- <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
- <mirrorOf>central</mirrorOf>
- </mirror>
- #######
-
- [root@localhost apache-maven-3.9.7]# vim /etc/profile
-
- #######添加环境变量
- export MAVEN_HOME=/usr/local/apache-maven-3.9.7
- export PATH=$PATH:$MAVEN_HOME/bin
- #######
-
- [root@localhost apache-maven-3.9.7]# source /etc/profile
- [root@localhost apache-maven-3.9.7]# mvn -v
- Apache Maven 3.9.7 (8b094c9513efc1b9ce2d952b3b9c8eaedaf8cbf0)
- Maven home: /usr/local/apache-maven-3.9.7
- Java version: 11.0.23, vendor: Oracle Corporation, runtime: /usr/local/java/jdk-11.0.23
- Default locale: zh_CN, platform encoding: UTF-8
- OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"
请安装链接安装docker
注意推荐使用dokcer部署jenkins,不建议用war/jar部署,很不方便,使用过程需要多次重启,并且环境变量复杂。
注意我使用的阿里云的docker镜像,docker pull jenkins(此版本显示是2.60版本,但实际是几年前的远古版本)、docker pull jenkins/jenkins(2.328版本),这两个都不要使用,使用网盘里的2.401版本
JAVA_OPTS=-Dhudson.model.DownloadService.noSignatureCheck=true 此命令跟插件下载相关
- docker run -u root -d \
- -p 100:8080 \
- -v /var/jenkins_home/workspace/:/var/jenkins_home/workspace/ \
- -v /var/run/docker.sock:/var/run/docker.sock \
- -v /usr/bin/docker:/usr/bin/docker \
- -v /usr/local/java/jdk-11.0.23:/usr/local/java \
- -v /usr/local/apache-maven-3.9.7:/usr/local/maven \
- -e JAVA_OPTS="-Dorg.apache.commons.jelly.tags.fmt.timeZone='Asia/Shanghai" \
- -e JAVA_OPTS=-Dhudson.model.DownloadService.noSignatureCheck=true \
- --restart=always \
- --name myjenkins jenkins/jenkins:2.401
- [root@jenkins-60 ~]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 8639174e3d49 jenkins/jenkins "/sbin/tini -- /usr/…" 5 minutes ago Up 5 minutes 50000/tcp, 0.0.0.0:100->8080/tcp, :::100->8080/tcp myjenkins
访问11.0.1.60:100,cat /var/jenkins_home/secrets/initialAdminPassword 查看秘钥
- [root@jenkins-60 ~]# docker exec myjenkins cat /var/jenkins_home/secrets/initialAdminPassword
- a09c4ca559ff4de496495dc4f382df52
此处可以直接右上角跳过,因为在这里安装基本全部失败。
可创建新用户,也可以直接跳过,使用admin用户
先把admin的密码改了,不让每次登录都要复制,新密码:lgblgblgb(自定义),选择“save”后重新登陆
首页可以查看jenkins版本
- #宿主机
- MAVEN_HOME=/usr/local/apache-maven-3.9.1
- JAVA_HOME=/usr/local/java/jdk-11.0.10
-
- #jenkins容器
- MAVEN_HOME=/usr/local/maven
- JAVA_HOME=/usr/local/java
"系统管理"--“全局工具配置”--“jdk”--"maven",注意是容器内环境地址,不是宿主机环境地址
注意每次重启jenkins加粗后都需要手动source /etc/profile,否则找不到mvn环境变量,原因未知
- docker exec -it myjenkins /bin/bash
-
- apt-get update
- apt-get install vim -y
-
- vim /etc/profile
-
- export JAVA_HOME=/usr/local/java
- export PATH=$PATH:${JAVA_HOME}/bin
- export MAVEN_HOME=/usr/local/maven
- export PATH=$PATH:$MAVEN_HOME/bin
-
- source /etc/profile
-
- java -version
- mvn -v
一定要配置,否则流水线pipeline会找不到mvn命令
- root@0a84ef7665d3:/# echo $PATH
- /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/java/bin:/usr/local/maven/bin
此时我们查看插件,插件提示需要更新jenkins版本,#####非常重要#####翻阅很多资料都找不到,注意需要选择对应版本,我此处使用的2.328版本,网上很多都是直接使用清华源最新镜像,会提示该插件需要到最新版或者更新才能使用。
换源,选择“Manage Jenkins”,“Manage Plugins”,“Advanced”,“Update Site”,更换成国内源,手动选择版本
Index of /jenkins/updates/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
该图片是错误的,实际地址是https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-stable-2.401.1/update-center.json
- #原地址
- https://updates.jenkins.io/update-center.json
-
- #更改后地址
- https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-stable-2.401.1/update-center.json
安装两个插件“locale”、“Localization: Chinese (Simplified)”,注意2.328版本下载不了Localization: Chinese (Simplified),不能设置中文。
安装完成后重启容器就自动切换成中文了
- [root@jenkins-60 ~]# docker restart myjenkins
- myjenkins
安装其他插件,安装完后重启容器
Maven Integration 用于构建maven项目
Pipeline: Stage View 用于构建 pipeline流水线项目
gitee 用于使用gitee拉取代码
git 用于拉去代码
ssh 用于ssh使用cmd命令
pipeline 用于构建任务视图
- docker exec -it myjenkins /bin/bash
-
- apt-get update
- apt-get install vim -y
-
- vim /etc/profile
-
- #######
- export JAVA_HOME=/usr/local/java
- export PATH=$PATH:${JAVA_HOME}/bin
- export MAVEN_HOME=/usr/local/maven
- export PATH=$PATH:$MAVEN_HOME/bin
- #######
-
- source /etc/profile
-
- java -version
- mvn -v
源码管理,没有用户凭证,可以直接创建一个,注意是“用户名和密码”类型,不是“gitee API”令牌。注意此处如果是公开仓库,凭证可以直接选择“无”
需要提前把jdk-11.0.23_linux-x64_bin.tar.gz文件放到容器内/home/webapps目录,以tar包形式就可以,ADD命令会自动解压
Dockerfile内容
-
- [root@jenkins-60 opt]# docker exec -it myjenkins /bin/bash
- root@0a84ef7665d3:/# mkdir /home/webapps
- root@0a84ef7665d3:/# vim /home/webapps/Dockerfile
-
- ########Dockerfile内容
- FROM centos:7
- EXPOSE 8081
- RUN mkdir -p /usr/local/java
- ADD jdk-11.0.23_linux-x64_bin.tar.gz /usr/local/java/
- ADD demo_springboot-0.0.1-SNAPSHOT.jar /app.jar
- ENV JAVA_HOME /usr/local/java/jdk-11.0.23
- ENV PATH $JAVA_HOME/bin:$PATH
- ENTRYPOINT ["nohup","java","-jar","/app.jar"]
- ########
-
- [root@jenkins-60 opt]# docker cp /opt/jdk-11.0.23_linux-x64_bin.tar.gz myjenkins:/home/webapps/
-
- root@0a84ef7665d3:/# ls /home/webapps
- Dockerfile jdk-11.0.23_linux-x64_bin.tar.gz
完整的shell内容,大致内容就是将mvn打包后的jar包复制到/home/webapps/下,并且在当前目录build构建镜像,最后运行一个基于该镜像的容器jenkins-app。
- #!/bin/bash
-
- echo "部署的目录和项目名称"
- DIR="/home/webapps"
- projectName="demo_springboot-0.0.1-SNAPSHOT"
-
-
- echo "拷贝jar包到/home/webapps目录"
- cp /var/jenkins_home/workspace/test2_mvn/target/${projectName}.jar /home/webapps
- sleep 5
-
- echo "切换到启动脚本目录"
- cd ${DIR}
-
- BUILD_ID=dontKillMe
-
- echo "build镜像"
- docker build -t app:1 .
-
- #如果没有打算上传镜像仓库,此部分可以忽略
- #echo "tag打包"
- #docker tag app:1 10.23.197.21:90/dev/app:1
- #echo "登陆harbor"
- #docker login 10.23.197.21:90
- #sleep 10
- #echo "push镜像"
- #docker push 10.23.197.21:90/dev/app:1
- #sleep 20
-
- echo "docker运行app"
- docker run -d -p 8081:8081 --name jenkins-app app:1
构建后生成一个app:1的镜像并运行会自动运行一个名为jenkins-app的实例容器。
jar包位置
jar包目录:/var/jenkins_home/workspace/任务名/target/项目名-0.0.1-SNAPSHOT.jar
示例:/var/jenkins_home/workspace/test2_mvn/target/demo_springboot-0.0.1-SNAPSHOT.jar
查看构建完成生成的项目文件
- #任务文件test2_mvn,拉取代码src和pom.xml文件,target则是mvn构建后生成的jar包
- [root@jenkins-60 ~]# ls /var/jenkins_home/workspace/test2_mvn
- pom.xml src target
- [root@jenkins-60 ~]# ls /var/jenkins_home/workspace/test2_mvn/target/
- classes generated-sources maven-status
- demo_springboot-0.0.1-SNAPSHOT.jar generated-test-sources surefire-reports
- demo_springboot-0.0.1-SNAPSHOT.jar.original maven-archiver test-classes
-
- #查看镜像
- [root@jenkins-60 ~]# docker images | grep app
- app 1 7959e5d38ca6 2 minutes ago 504MB
-
- #查看运行的容器
- [root@jenkins-60 ~]# docker ps | grep jenkins-app
- ee5baf506b46 app:1 "nohup java -jar /ap…" About a minute ago Up About a minute 0.0.0.0:8081->8081/tcp, :::8081->8081/tcp jenkins-app
-
- #查看springboot服务是否正常
- [root@jenkins-60 ~]# curl 127.0.0.1:8081
- <html>
- <body>
- <h1>hello jenkins!!!</h1>
- <p>this is a html page</p>
- </body>
- </html>
创建一个pipline流水线任务,相比maven任务,pipeline任务自由度更高,拉取代码部分也需要用代码实现
pipeline默认终端位置是/var/jenkins_home/workspace/test4_mvn_pipeline
流水线核心内容,gitee仓库地址,gitee账户凭证ID
- #凭证ID就是adminID
- git credentialsId: 'ea33e7f6-af2a-46ef-8e13-015b20cd2360', url: 'https://gitee.com/*******/demo_springboot.git'
流水线完整内容,tag可调节镜像/app版本,pipeline不能使用cd命令切换目录,默认就是在/var/jenkins_home/workspace/test4_mvn_pipeline下,所以构建命令需要使用&&连用cd /home/webapps && docker build -t app:${tag} .
- pipeline {
- agent any
- environment{
- DIR="/home/webapps"
- projectName="demo_springboot-0.0.1-SNAPSHOT"
- tag="4"
- }
- stages {
- stage('pull git code') {
- steps {
- echo 'pull git code'
- git credentialsId: 'ea33e7f6-af2a-46ef-8e13-015b20cd2360', url: 'https://gitee.com/*******/demo_springboot.git'
- }
- }
- stage('maven packing'){
- steps {
- echo "maven打包"
- //sh 'source /etc/profile'
- //sh 'mv /opt/cp.sh /opt/cd.sh'
- sh 'pwd'
- sh 'mvn -v'
- sh 'mvn clean'
- sh 'mvn clean package'
- echo 'maven打包完成'
- sh 'cp /var/jenkins_home/workspace/test4_mvn_pipeline/target/${projectName}.jar /home/webapps'
- }
- }
- stage('docker build'){
- steps {
- sh 'cd /home/webapps && docker build -t app:${tag} .'
- sleep 5
- sh 'pwd'
- }
- }
- //如果没有本地镜像仓库,此处可以使用//注释代码
- // stage('docker push'){
- // steps {
- // sh 'docker tag app:${tag} 10.23.197.21:90/dev/app:${tag}'
- // sh 'docker login 10.23.197.21:90'
- // sh 'docker push 10.23.197.21:90/dev/app:${tag}'
- // }
- // }
- stage('docker run'){
- steps {
- // sh 'docker run -d -p 8081:8081 --name jenkins-app 10.23.197.21:90/dev/app:${tag}'
- sh 'docker run -d -p 8081:8081 --name jenkins-app app:${tag}'
- }
- }
- }
- }
构建成功,生成镜像app:4成功,容器运行成功,服务运行正常
- root@0a84ef7665d3:/# docker ps -a | grep jenkins-app
- ee5baf506b46 app:4 "nohup java -jar /ap…" About a minute ago Up About a minute 0.0.0.0:8081->8081/tcp, :::8081->8081/tcp jenkins-app
-
- root@0a84ef7665d3:/# docker images | grep app
- app 4 eb4bb440af02 About a minute ago 504MB
- app 1 7959e5d38ca6 15 hours ago 504MB
-
- [root@jenkins-60 ~]# curl 127.0.0.1:8081
- <html>
- <body>
- <h1>hello jenkins!!!</h1>
- <p>this is a html page</p>
- </body>
- </html>
私密仓库,请确保凭证账户与gitee账户一致,切该gitee账户拥有访问该仓库权限
设置凭证后就可以了
如果是流水线, 在“凭据管理”可以查看唯一标识码
每次重启jenkins容器后都需要进入容器source /etc/profile 加载环境变量
- [root@jenkins-60 ~]# docker exec -it myjenkins /bin/bash
- root@0a84ef7665d3:/# mvn
- bash: mvn: command not found
- root@0a84ef7665d3:/# source /etc/profile
- root@0a84ef7665d3:/# mvn -v
- Apache Maven 3.9.7 (8b094c9513efc1b9ce2d952b3b9c8eaedaf8cbf0)
- Maven home: /usr/local/maven
- Java version: 11.0.23, vendor: Oracle Corporation, runtime: /usr/local/java
- Default locale: en, platform encoding: UTF-8
- OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"
dockerfile文件有误,build构建镜像时没找到java环境,原因是我把dockerfile文件中的jdk版本写错了
- 报错总结
- [root@jenkins-60 ~]# docker logs 8c1d821b8dc8f3ddbe7c280c231a0b7fa0e611356a0ea858611e86427deb8839
- nohup: failed to run command 'java': No such file or directory
dockerfile文件有误,build构建镜像时没找到java环境,原因是我把dockerfile文件中的jdk版本写错了
ADD failed: file not found in build context or excluded by .dockerignore: stat jdk-11.0.10_linux-x64_bin.tar.gz: file does not exist
jenkins没有添加系统全局变量
- root@0a84ef7665d3:/# echo $PATH
- /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/java/bin:/usr/local/maven/bin
再次构建
构建完成,但是运行镜像时有一个同名镜像,我忘记删除了
- root@0a84ef7665d3:/# docker rm jenkins-app
- jenkins-app
删除镜像重新构建就可以了
pipeline 插件没安装好,重新安装,安装后重启jenkins
https://www.cnblogs.com/iyiluo/p/17688649.html
更换国内指定版本源
jenkins部署springboot项目:
Jenkins 自动化构建部署 Spring Boot 项目(从零到搭建完成)_jenkins部署springboot项目-CSDN博客
仓库的credentials 只能选择ssh key 或者用户名密码的凭据,gitee api token的凭据只是给触发器插件用的,这是两套凭据。所以需要单独为git源码管理插件配置ssh key 或者用户名密码凭据
耐心配置Jenkins全局连接Gitee_jenkins gitee-CSDN博客
更改容器挂载目录
容器指定挂载目录后如何更改挂载目录_容器挂载目录重置方法-CSDN博客
jenkins构建springboot,脚本start.sh,stop.sh
Jenkins 自动化构建部署 Spring Boot 项目(从零到搭建完成)_jenkins部署springboot项目-CSDN博客
jar包没有主属性问题
jar中没有主清单属性 java -jar xxx-0.0.1-SNAPSHOT.jar 没有主清单属性(解决 全程图解 windows)-CSDN博客
dockerfile构建jdk环境:
Docker手动构建JDK镜像_docker 打包含jdk的镜像-CSDN博客
插件版本问题
关于Jenkins安装后,插件管理中插件版本依赖报错问题的解决方法_warning: this plugin is built for jenkins 2.361.4 -CSDN博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。