Jenkins
Name | Version |
---|---|
Linux | Cent OS 7 |
Jenkins | 2.275-1.1 |
Java | 1.8.0_292 |
Node.js | 12.19 |
Nginx | 1.16.0 |
Maven | 3.8.1 |
一、Jenkins环境搭建
1. 安装Java
# 下载Java
yum install -y java
# 查看安装
[root@Mashiro /]# java -version
java version "1.8.0_281"
Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2. 安装Jenkins
# 前置插件[已安装可不执行此命令]
yum -y install wget
# 官网安装命令
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
yum install -y jenkins
# 使用清华大学镜像
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.249.3-1.1.noarch.rpm
yum install jenkins-2.249.3-1.1.noarch.rpm
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
3. 修改Jenkins配置文件
vim /etc/sysconfig/jenkins
- 1
JENKINS_HOME="/var/lib/jenkins"
JENKINS_PORT="8080"
JENKINS_USER="jenkins"
- 1
- 2
- 3
- 4
- 5
4. 启动Jenkins
service jenkins start/stop/restart
- 1
5. 访问Jenkins页面
5.1. 进入Jenkins登录页面
# 127.0.0.1 改为 自己的服务器地址
# 8080 为上面设置的 JENKINS_PORT
http://127.0.0.1:8080/
- 1
- 2
- 3
5.2. 获取登录密码
cat /var/lib/jenkins/secrets/initialAdminPassword
- 1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QhcSykJd-1636896546911)(password.png)]
6. 新手入门
6.1. 安装插件
这波啊 这波是能自动绝不手动
6.2. 自动安装插件
6.3. 创建第一个管理员用户
- 输入要创建的帐号信息,然后保存并完成。
- 如果不创建账号,使用初始的admin账户也可以。
6.4. 修改Jenkins URL
- Jenkins URL 是Jenkins的 服务器地址+端口号 一般默认就好
6.5. 搭建成功
二、Jenkins部署Spring Cloud 项目
1. 安装、配置所需要的插件
1.1. 下载Maven插件
- 进入系统管理
- 选择Maven进行下载
1.2. 工具全局配置设置
- 配置JDK (别名随便起 自动安装)
- 配置Maven (NAME随便起 自动安装)
1.3. 设置全局Git凭据
1.4. 添加凭据
2. 开始部署项目
2.1. 新建任务
2.2. 构建部署Maven项目
2.3. General
2.4. 源码管理
2.5. Build
2.6. Post Steps
2.7. 添加Shell 执行脚本
- Shell 实例
#!/bin/bash
export BUILD_ID=dontKillMe
#Jenkins中编译好的jar位置
jar_path=/var/lib/jenkins/workspace/java-a/iap_play/iap-service/iap-system/iap-system-provider/target
#Jenkins中编译好的jar名称
jar_name=iap-system-provider-1.0.jar
#获取并杀掉以前的进程
ps aux|grep "iap-system-provider-1.0.jar"|grep -v grep|awk '{print $2}'|xargs kill -9
#进入指定的编译好的jar的位置
cd ${jar_path}
#启动jar,后台启动
nohup java -jar ${jar_name} &
echo "启动成功"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
2.8. 开始构建
3. 扫雷
3.1. ERROR: Failed to parse POMs
Parsing POMsERROR: Failed to parse POMsorg.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:[FATAL] Non-resolvable parent POM for com.itl:iap:1.0: org.springframework.boot:spring-boot-starter-parent:pom:2.2.7.RELEASE failed to transfer from http://0.0.0.0/ during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of maven-default-http-blocker has elapsed or updates are forced. Original error: Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:2.2.7.RELEASE from/to maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories: [iap_nexus (http://xxx.xx.xx.xxx:xxxx/nexus/repository/maven-public/, default, releases+snapshots)] and 'parent.relativePath' points at wrong local POM @ line 6, column 13 at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:397) at hudson.maven.MavenEmbedder.buildProjects(MavenEmbedder.java:370) at hudson.maven.MavenEmbedder.readProjects(MavenEmbedder.java:340) at hudson.maven.MavenModuleSetBuild$PomParser.invoke(MavenModuleSetBuild.java:1330) at hudson.maven.MavenModuleSetBuild$PomParser.invoke(MavenModuleSetBuild.java:1124) at hudson.FilePath.act(FilePath.java:1162) at hudson.FilePath.act(FilePath.java:1145) at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.parsePoms(MavenModuleSetBuild.java:985) at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.doRun(MavenModuleSetBuild.java:689) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:513) at hudson.model.Run.execute(Run.java:1907) at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:543) at hudson.model.ResourceController.execute(ResourceController.java:97) at hudson.model.Executor.run(Executor.java:429)Finished: FAILURE
- 1
-
原因: 项目中采用nexus私服,需要配置修改Jenkins组件中Maven的配置文件。
-
解决方法:
vim /var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/maven3.8.1/conf/settings.xml
- 1
<mirrors> <mirror> <id>iap_nexusid> <name>IAP Nexusname> <url>http://xxx.xx.xx.xxx:xxxx/nexus/repository/maven-public/url> <mirrorOf>!internal.repo,*mirrorOf> mirror> <mirror> <id>aliyunmavenid> <mirrorOf>*mirrorOf> <name>aliyunname> <url>https://maven.aliyun.com/repository/publicurl> mirror>mirrors>
- 1
3.2. FATAL: command execution failed
[java-a] $ mvn -f /var/lib/jenkins/workspace/java-a/java-a/iap_play/pom.xml clean installFATAL: command execution failedchannel stoppedjava.io.IOException: error=2, No such file or directory at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.<init>(UNIXProcess.java:247) at java.lang.ProcessImpl.start(ProcessImpl.java:134) at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)Caused: java.io.IOException: Cannot run program "mvn" (in directory "/var/lib/jenkins/workspace/java-a"): error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) at hudson.Proc$LocalProc.<init>(Proc.java:252) at hudson.Proc$LocalProc.<init>(Proc.java:221) at hudson.Launcher$LocalLauncher.launch(Launcher.java:996) at hudson.Launcher$ProcStarter.start(Launcher.java:508) at hudson.Launcher$ProcStarter.join(Launcher.java:519) at hudson.tasks.Maven.perform(Maven.java:368) at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:803) at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.build(MavenModuleSetBuild.java:944) at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.doRun(MavenModuleSetBuild.java:894) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:513) at hudson.model.Run.execute(Run.java:1907) at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:543) at hudson.model.ResourceController.execute(ResourceController.java:97) at hudson.model.Executor.run(Executor.java:429)Build step 'Invoke top-level Maven targets' marked build as failureFinished: FAILURE
- 1
-
原因: 项目中采用nexus私服,需要配置修改Jenkins组件中Maven的配置文件。
-
解决方法:调整 Jenkins 配置中的 pom.xml 路径
3.3. No goals have been specified for this build.
[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1][ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.[ERROR] Re-run Maven using the -X switch to enable full debug logging.[ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles:[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/NoGoalSpecifiedExceptionBuild step 'Invoke top-level Maven targets' marked build as failureFinished: FAILURE
- 1
-
原因: pom.xml 中缺少配置
-
解决方法:
<build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.pluginsgroupId> <artifactId>maven-compiler-pluginartifactId> <version>3.8.1version> plugin> <plugin> <groupId>org.sonarsource.scanner.mavengroupId> <artifactId>sonar-maven-pluginartifactId> <version>3.6.0.1398version> plugin> <plugin> <groupId>org.jacocogroupId> <artifactId>jacoco-maven-pluginartifactId> <version>0.8.6version> plugin> plugins> pluginManagement> <defaultGoal>compiledefaultGoal> build>
- 1
3.4. Jenkins 用户权限问题
vim /etc/sysconfig/jenkisn# 配置修改JENKINS_USER="root"JENKINS_GROUP="root"
- 1
三、Jenkins 部署 Vue
1. 安装 NodeJS
在Jenkins页面的插件管理中下载 Node.js 插件
2. NodeJS全局工具配置
Tips: Node.js 推荐下载稳定的 12.xx 版本
3. 构建部署Vue项目
3.1. 新建任务
3.2. Greneral、源码管理步骤与构建Spring Cloud项目一样
3.3. 环境构建
- 构建环境选择Node & npm
3.4. 构建执行Shell
# 进入Jenkins项目工程下cd /var/lib/jenkins/workspace/web-a-1# 配置淘宝源npm config set registry http://registry.npm.taobao.org# 下载、打包npm installnpm run build:prod# 移除旧项目,打包新项目rm -rf web-a-1.tar.gztar -zcvf web-a-1.tar.gz *
- 1
4. 扫雷
4.1. npm ERR!
npm WARN deprecated core-js@2.6.12: core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.npm ERR! code 1npm ERR! path /var/lib/jenkins/workspace/web-a-1/node_modules/deasyncnpm ERR! command failednpm ERR! command sh -c node ./build.jsnpm ERR! make: Entering directory `/var/lib/jenkins/workspace/web-a-1/node_modules/deasync/build'npm ERR! CXX(target) Release/obj.target/deasync/src/deasync.onpm ERR! make: Leaving directory `/var/lib/jenkins/workspace/web-a-1/node_modules/deasync/build'npm ERR! gyp info it worked if it ends with oknpm ERR! gyp info using node-gyp@7.1.2npm ERR! gyp info using node@16.3.0 | linux | x64npm ERR! gyp info find Python using Python version 2.7.5 found at "/bin/python"npm ERR! gyp http GET https://nodejs.org/download/release/v16.3.0/node-v16.3.0-headers.tar.gznpm ERR! gyp http 200 https://nodejs.org/download/release/v16.3.0/node-v16.3.0-headers.tar.gznpm ERR! gyp http GET https://nodejs.org/download/release/v16.3.0/SHASUMS256.txtnpm ERR! gyp http 200 https://nodejs.org/download/release/v16.3.0/SHASUMS256.txtnpm ERR! (node:78268) [DEP0150] DeprecationWarning: Setting process.config is deprecated. In the future the property will be read-only.npm ERR! (Use `node --trace-deprecation ...` to show where the warning was created)npm ERR! gyp info spawn /bin/pythonnpm ERR! gyp info spawn args [npm ERR! gyp info spawn args '/var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_JS_16.3.0/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py',npm ERR! gyp info spawn args 'binding.gyp',npm ERR! gyp info spawn args '-f',npm ERR! gyp info spawn args 'make',npm ERR! gyp info spawn args '-I',npm ERR! gyp info spawn args '/var/lib/jenkins/workspace/web-a-1/node_modules/deasync/build/config.gypi',npm ERR! gyp info spawn args '-I',npm ERR! gyp info spawn args '/var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_JS_16.3.0/lib/node_modules/npm/node_modules/node-gyp/addon.gypi',npm ERR! gyp info spawn args '-I',npm ERR! gyp info spawn args '/root/.cache/node-gyp/16.3.0/include/node/common.gypi',npm ERR! gyp info spawn args '-Dlibrary=shared_library',npm ERR! gyp info spawn args '-Dvisibility=default',npm ERR! gyp info spawn args '-Dnode_root_dir=/root/.cache/node-gyp/16.3.0',npm ERR! gyp info spawn args '-Dnode_gyp_dir=/var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_JS_16.3.0/lib/node_modules/npm/node_modules/node-gyp',npm ERR! gyp info spawn args '-Dnode_lib_file=/root/.cache/node-gyp/16.3.0/<(target_arch)/node.lib',npm ERR! gyp info spawn args '-Dmodule_root_dir=/var/lib/jenkins/workspace/web-a-1/node_modules/deasync',npm ERR! gyp info spawn args '-Dnode_engine=v8',npm ERR! gyp info spawn args '--depth=.',npm ERR! gyp info spawn args '--no-parallel',npm ERR! gyp info spawn args '--generator-output',npm ERR! gyp info spawn args 'build',npm ERR! gyp info spawn args '-Goutput_dir=.'npm ERR! gyp info spawn args ]npm ERR! gyp info spawn makenpm ERR! gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]npm ERR! make: g++: Command not foundnpm ERR! make: *** [Release/obj.target/deasync/src/deasync.o] Error 127npm ERR! gyp ERR! build error npm ERR! gyp ERR! stack Error: `make` failed with exit code: 2npm ERR! gyp ERR! stack at ChildProcess.onExit (/var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_JS_16.3.0/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)npm ERR! gyp ERR! stack at ChildProcess.emit (node:events:394:28)npm ERR! gyp ERR! stack at Process.ChildProcess._handle.onexit (node:internal/child_process:290:12)npm ERR! gyp ERR! System Linux 3.10.0-1160.el7.x86_64npm ERR! gyp ERR! command "/var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_JS_16.3.0/bin/node" "/var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_JS_16.3.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"npm ERR! gyp ERR! cwd /var/lib/jenkins/workspace/web-a-1/node_modules/deasyncnpm ERR! gyp ERR! node -v v16.3.0npm ERR! gyp ERR! node-gyp -v v7.1.2npm ERR! gyp ERR! not ok npm ERR! Build failednpm ERR! A complete log of this run can be found in:npm ERR! /root/.npm/_logs/2021-06-22T06_50_05_035Z-debug.logBuild step 'Execute shell' marked build as failureFinished: FAILURE
- 1
- 原因:未知
- 解决办法:因此时使用的Node版本为16.x,改用12.x后,install成功。
4.2. workspace/wxsweb: No such file or directory
[web-a-1] $ /bin/sh -xe /tmp/jenkins6674175746436472177.sh+ cd /var/jenkins_home/workspace/wxsweb/tmp/jenkins6674175746436472177.sh: line 2: cd: /var/jenkins_home/workspace/wxsweb: No such file or directoryBuild step 'Execute shell' marked build as failureFinished: FAILURE
- 1
- 原因:找不到/var/jenkins_home/workspace/wxsweb
- 解决办法:安装webpack
npm install webpack -g
- 1
4.3. ERROR Error: Cannot find module ‘webpack/package.json’
+ npm run build:prod -config package.json> vue-admin-template@4.4.0 build:prod /var/lib/jenkins/workspace/web-a-1> vue-cli-service build "package.json"- Building for production... ERROR Error: Cannot find module 'webpack/package.json'Require stack:- /var/lib/jenkins/workspace/web-a-1/node_modules/html-webpack-plugin/lib/chunksorter.js- /var/lib/jenkins/workspace/web-a-1/node_modules/@vue/cli-service/lib/config/app.js- /var/lib/jenkins/workspace/web-a-1/node_modules/@vue/cli-service/lib/Service.js- /var/lib/jenkins/workspace/web-a-1/node_modules/@vue/cli-service/bin/vue-cli-service.jsError: Cannot find module 'webpack/package.json'Require stack:- /var/lib/jenkins/workspace/web-a-1/node_modules/html-webpack-plugin/lib/chunksorter.js- /var/lib/jenkins/workspace/web-a-1/node_modules/@vue/cli-service/lib/config/app.js- /var/lib/jenkins/workspace/web-a-1/node_modules/@vue/cli-service/lib/Service.js- /var/lib/jenkins/workspace/web-a-1/node_modules/@vue/cli-service/bin/vue-cli-service.js at Function.Module._resolveFilename (internal/modules/cjs/loader.js:831:15) at Function.Module._load (internal/modules/cjs/loader.js:687:27) at Module.require (internal/modules/cjs/loader.js:903:19) at require (internal/modules/cjs/helpers.js:74:18) at Object.<anonymous> (/var/lib/jenkins/workspace/web-a-1/node_modules/html-webpack-plugin/lib/chunksorter.js:137:12) at Module._compile (internal/modules/cjs/loader.js:1015:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1035:10) at Module.load (internal/modules/cjs/loader.js:879:32) at Function.Module._load (internal/modules/cjs/loader.js:724:14) at Module.require (internal/modules/cjs/loader.js:903:19)npm ERR! code ELIFECYCLEnpm ERR! errno 1npm ERR! vue-admin-template@4.4.0 build:prod: `vue-cli-service build "package.json"`npm ERR! Exit status 1npm ERR! npm ERR! Failed at the vue-admin-template@4.4.0 build:prod script.npm ERR! This is probably not a problem with npm. There is likely additional logging output above.npm ERR! A complete log of this run can be found in:npm ERR! /root/.npm/_logs/2021-06-22T10_58_44_251Z-debug.logBuild step 'Execute shell' marked build as failureFinished: FAILURE
- 1
- 原因:未知
- 解决方法
# 移除项目中的 node_modules,package-lock.json rm -rf node_modules/rm package-lock.json # 清楚缓存npm cache clean# 打包下载npm installnpm run build:prod# 一套之后,打包也行了,自动构建也行了# Finished: SUCCESS
- 1
四、Nginx 代理 Jenkins
1. 下载Nginx
# 创建存放Nginx的目录 并 进入mkdir /usr/nginxcd /usr/nginx# 检查下载Gccgcc -vyum -y install gcc# Nginx三个前置依赖yum install -y pcre pcre-develyum install -y zlib zlib-develyum install -y openssl openssl-devel# 下载Nginx的tar包wget http://nginx.org/download/nginx-1.16.0.tar.gz tar -zxvf nginx-1.16.0.tar.gz# 三行命令执行编译下载./configure make make install# 进入Nginx目录cd /usr/local/nginx/ # 启动运行Nginx./nginx # 启动Nginx./nginx -s reload # 重启Nginx
- 1
2. 修改Jenkins配置
vim /etc/sysconfig/jenkisn# 增加JENKINS_ARGS="--prefix=/jenkins"
- 1
3. 修改Nginx配置
vim /usr/local/nginx/conf/nginx.conf
- 1
server { listen 180; # 监听的端口 server_name localhost; # 服务地址 location /jenkins { proxy_pass http://localhost:8080/jenkins; # 代理Jenkins }}
- 1
4. 重启Nginx
[root@ly01 sbin]# pwd/usr/local/nginx/sbin[root@ly01 sbin]# lsnginx[root@ly01 sbin]# ./nginx -s reload
- 1
5. 测试访问
http:// s e r v e r n a m e : {server_name}: servername:{listen}/jenkins