9.jenkins集成nexus
1.maven是什么
2.nexus的作用
3.安装nexus
4.配置nexus
5.nexus详解
6.配置jenkins
集成nexus
完成自动化ci
7.jenkins拉取nexus私服的war包部署到远端服务器
1.maven是什么
Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供构建和依赖管理支持的工具。
做Java开发通常都离不开Maven,在Maven出现之前,如果我们项目里面引用了别的jar包,需要我们把jar包下载好然后放到项目的特定目录下。这样做的缺点就是每次更新jar包都需要去重新下载一次,而且如果依赖的jar包比较多的话容易发生jar包冲突,大大降低了开发的效率。Maven的出现让依赖jar包这个工作变得简单,只需要在项目里面声明jar包Maven就可以自动去中心仓库把需要的jar包下载下来而且可以迅速定位jar包冲突。
2.nexus的作用
那么Maven是从哪里下载jar包呢?
如果不做特殊配置的话,Maven是从中央仓库下载jar包。中央仓库是全世界最大的Maven仓库,包括了所有的Maven依赖。但是中央仓库是架设在国外,国内下载的速度比较慢,而且经常出现访问不了的情况。所以国内阿里架设了中央仓库的代理服务器——阿里云,可以看成是中央仓库的镜像。这就解决了依赖下载慢的问题。
有的小伙伴就要问了,既然已经有阿里代理了,我们为什么还要搭建Maven私服呢?
试想一下,在公司里面做开发基本都是一个团队,从几人到几十上百人都有可能,那么所有人用到的依赖都是一样的,这时如果把Maven依赖放到公司的内网环境中,可以大大节省项目初始化的时间。而且不同团队之间会共享一些公共模块或者项目需要迭代更新提供给其他团队使用,这时候就需要把依赖放到私服上去。
下面是有无私服的区别。
1.安装nexus
3.1 下载nexus
https://www.sonatype.com/products/sonatype-nexus-oss-download
3.1.1 注册
1.1.2 选择适配的软件
3.2 安装nexus
[root@jenkins local]# tar xf nexus-3.43.0-01-unix.tar.gz
[root@jenkins local]# ln -s /usr/local/nexus-3.43.0-01 /usr/local/nexus
3.3 配置nexus
3.3.1 配置nexus
进程运行用户
[root@jenkins local]# cat /usr/local/nexus/bin/nexus.rc
run_as_user="root"
3.3.2 配置nexus
端口及监听的地址
[root@jenkins ~]# cat /usr/local/nexus/etc/nexus-default.properties
application-port=8081
application-host=0.0.0.0
3.3.3 启动nexus
服务
[root@jenkins ~]# /usr/local/nexus/bin/nexus start
3.3.4 nexus
默认密码
[root@jenkins ~]# cat /usr/local/sonatype-work/nexus3/admin.password
xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx
3.4 配置nexus web
3.4.1 配置nexus的中央仓库,当jar包不存在时,去中央仓库下载及缓存到本地仓库
settings --> Repositories --> maven-central 修改 proxy 选项 remote storage为
http://maven.aliyun.com/nexus/content/groups/public
点击 save
保存
4. 配置maven
链接 nexus
4.1 配置maven连接nexus的认证
cat /var/lib/jenkins/maven-3.8.6/conf/settings.xml
<servers>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>!QAZxsw2</password>
</server>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>!QAZxsw2</password>
</server>
<server>
<id>maven-central</id>
<username>admin</username>
<password>!QAZxsw2</password>
</server>
</servers>
4.2 配置nexus仓库
cat /var/lib/jenkins/maven-3.8.6/conf/settings.xml
<mirrors>
<mirror>
<id>maven-central</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.1.190:8081/repository/maven-central/</url>
</mirror>
<mirror>
<id>nexus-snapshots</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.1.190:8081/repository/maven-snapshots/</url>
</mirror>
<mirror>
<id>nexus-releases</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.1.190:8081/repository/maven-releases/</url>
</mirror>
</mirrors>
4.3 验证是否能上传下载
4.3.1 查看war包信息
[root@jenkins testmaven]# cat /var/lib/jenkins/workspace/testmaven/pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.efsavage</groupId>
<artifactId>hello-world-war</artifactId>
<version>1.0.0</version>
<packaging>war</packaging>
<name>Hello World Web Application Repository</name>
<description>Simplest possible Java Webapp</description>
4.3.2上传war包至nexus本地仓库
[root@jenkins testmaven]# /var/lib/jenkins/maven-3.8.6/bin/mvn deploy:deploy-file -DgroupId=com.efsavage -DartifactId=hello-world-war -Dversion=1.0.0 -Dpackaging=war -Dfile=/var/lib/jenkins/workspace/testmaven/target/hello-world-war-1.0.0.war -Durl=http://192.168.1.190:8081/repository/maven-releases/ -DrepositoryId=nexus-releases -DgeneratePom=true
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------< com.efsavage:hello-world-war >--------------------
[INFO] Building Hello World Web Application Repository 1.0.0
[INFO] --------------------------------[ war ]---------------------------------
[INFO]
[INFO] --- maven-deploy-plugin:2.7:deploy-file (default-cli) @ hello-world-war ---
Uploading to nexus-releases: http://192.168.1.190:8081/repository/maven-releases/com/efsavage/hello-world-war/1.0.0/hello-world-war-1.0.0.war
Uploaded to nexus-releases: http://192.168.1.190:8081/repository/maven-releases/com/efsavage/hello-world-war/1.0.0/hello-world-war-1.0.0.war (4.4 kB at 30 kB/s)
Uploading to nexus-releases: http://192.168.1.190:8081/repository/maven-releases/com/efsavage/hello-world-war/1.0.0/hello-world-war-1.0.0.pom
Uploaded to nexus-releases: http://192.168.1.190:8081/repository/maven-releases/com/efsavage/hello-world-war/1.0.0/hello-world-war-1.0.0.pom (430 B at 7.3 kB/s)
Downloading from nexus-releases: http://192.168.1.190:8081/repository/maven-releases/com/efsavage/hello-world-war/maven-metadata.xml
Uploading to nexus-releases: http://192.168.1.190:8081/repository/maven-releases/com/efsavage/hello-world-war/maven-metadata.xml
Uploaded to nexus-releases: http://192.168.1.190:8081/repository/maven-releases/com/efsavage/hello-world-war/maven-metadata.xml (307 B at 6.1 kB/s)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.807 s
[INFO] Finished at: 2022-11-17T13:13:42+08:00
[INFO] ------------------------------------------------------------------------
4.3.3 下载war
[root@jenkins ~]# wget --user=admin --password='!QAZxsw2' http://192.168.1.190:8081/repository/maven-releases/com/efsavage/hello-world-war/1.0.0/hello-world-war-1.0.0.war
[root@jenkins ~]# ls
hello-world-war-1.0.0.war
5.nexus详解
6. 配置jenkins
集成nexus
完成自动化ci
代码maven构建完毕后,自动推送到nexus本地仓库!
6.1 自动触发项目构建
jenkins配置
gitlab配置
6.2 git源码管理
6.3 maven配置
6.4 用mvn把war包推送至nexus仓库
[root@jenkins bin]# cat /server/scripts/push_java.sh
#!/bin/bash
mvn=$(/var/lib/jenkins/maven-3.8.6/bin/mvn)
groupId=$(mvn help:evaluate -Dexpression=project.groupId |egrep -v "[INFO]")
artifactId=$(mvn help:evaluate -Dexpression=project.artifactId |egrep -v "[INFO]")
version=$(mvn help:evaluate -Dexpression=project.version |egrep -v "[INFO]")
packaging=$(mvn help:evaluate -Dexpression=project.packaging |egrep -v "[INFO]")
mvn deploy:deploy-file \
-DgroupId=${groupId} \
-DartifactId=${artifactId} \
-Dversion=${version} \
-Dpackaging=${packaging} \
-Dfile=target/${artifactId}-${version}.${packaging} \
-Durl=http://192.168.1.190:8081/repository/maven-releases/ \
-DrepositoryId=nexus-releases \
-DgeneratePom=true
6. jenkins拉取nexus私服的war包部署到远端服务器
6.1 项目配置nexus仓库的信息 获取私服仓库的war包
安装插件: Maven Artifact ChoiceListProvider (Nexus)
6.2 配置Ansible Inventory文件
[root@jenkins nexus_cd]# cat /etc/ansible/roles/code_cicd/code_update/hosts_test
[webservice]
192.168.1.191
[root@jenkins nexus_cd]# cat /etc/ansible/roles/code_cicd/code_update/hosts_prod
[webservice]
192.168.1.43
192.168.1.254
6.3 配置Ansible playbook
[root@jenkins nexus_cd]# cat /etc/ansible/roles/code_cicd/nexus_cd/tasks/main.yaml
- name: 0. Get System Time
shell:
cmd: "echo $(date +%F_%H_%M)"
register: Date
delegate_to: 127.0.0.1
- name: 1. Get War Package Url
shell:
cmd: "echo ${Nexus_Packages_list}"
register: War_Package_Url
delegate_to: 127.0.0.1
- name: 2. Get War Package Name
shell:
cmd: "echo ${Nexus_Packages_list}|awk -F[/] '{print $NF}'"
register: War_Package_Name
delegate_to: 127.0.0.1
- name: 3. Get Workspace Path
shell:
cmd: "echo ${WORKSPACE}"
register: Workspace_Path
delegate_to: 127.0.0.1
- name: 4. Get War Package
get_url:
url: "{{ War_Package_Url.stdout }}"
dest: "{{ Workspace_Path.stdout }}"
username: admin
password: '!QAZxsw2'
delegate_to: 127.0.0.1
- name: 5. Create Work Directory
file:
path: "/data/maven_{{ Date.stdout }}"
state: directory
- name: 6. Scp War Package To Remote Host
unarchive:
src: "{{ Workspace_Path.stdout }}/{{ War_Package_Name.stdout }}"
dest: "/data/maven_{{ Date.stdout }}"
- name: 7. Remove The Service
replace:
regexp: "^server {{ ansible_default_ipv4.address }}"
path: /etc/nginx/conf.d/maven_slb.conf
replace: "#server {{ ansible_default_ipv4.address }}"
delegate_to: 192.168.1.191
notify: Reload_Nginx
- meta: flush_handlers
- name: 8. Stop Tomcat Service
systemd:
name: tomcat
state: stopped
- name: 9. Check Tomcat Port
wait_for:
port: "{{ Tomcat_Port }}"
state: stopped
- name: 10. Unlink Path
file:
path: /data/ROOT
state: absent
- name: 11. Create Links Path
file:
src: "/data/maven_{{ Date.stdout }}"
dest: "/data/ROOT"
state: link
- name: 12. Start Tomcat Service
systemd:
name: tomcat
state: started
- name: 13. Check Tomcat Port
wait_for:
port: "{{ Tomcat_Port }}"
state: started
- name: 14. Create The Service
replace:
regexp: "^#server {{ ansible_default_ipv4.address }}"
path: /etc/nginx/conf.d/maven_slb.conf
replace: "server {{ ansible_default_ipv4.address }}"
delegate_to: 192.168.1.191
notify: Reload_Nginx
- meta: flush_handlers
[root@jenkins nexus_cd]# cat /etc/ansible/roles/code_cicd/nexus_cd/handlers/main.yaml
- name: Reload_Nginx
command:
cmd: nginx -s reload
delegate_to: 192.168.1.191
[root@jenkins nexus_cd]# cat /etc/ansible/roles/code_cicd/nexus_cd/vars/main.yaml
Tomcat_Port: 8080
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)