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

posted @ 2022-11-17 09:54  老夫聊发少年狂88  阅读(781)  评论(0编辑  收藏  举报