经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
Jenkins 基础配置
来源:cnblogs  作者:zylyehuo  时间:2023/9/1 8:52:40  对本文有异议

博客地址:https://www.cnblogs.com/zylyehuo/

参考链接
解决:Jenkins: signature verification failed in update site ‘default‘ (show details)

jenkins 下一切皆文件

虚拟机基本配置

Jenkins 安装

  1. cd /usr/local/src/
  2. rz # 选择以下安装包(xshell 软件命令)

下载完安装包如下所示

依次执行以下命令,进行安装

  1. rpm -ivh jdk-8u121-linux-x64.rpm
  2. # java -version # 检验是否安装成功
  3. rpm -ivh jenkins-2.99-1.1.noarch.rpm

启动 jenkins 服务

  1. systemctl start jenkins

设置 jenkins 服务开机自启

  1. systemctl enable jenkins

查看 jenkins 服务启动状态

  1. systemctl status jenkins

查看服务端口启用情况(jenkins 默认占用 8080 端口)

  1. netstat -lnupt

Jenkins 初始化配置

通过浏览器访问 10.0.0.12:8080(ip + 8080 端口)

查询本机 ip 的方式

  1. ip addr

获取初始化密码

  1. cat /var/lib/jenkins/secrets/initialAdminPassword

输入初始化密码后点击 Continue,出现如下界面

点击 ×,不选择提供的安装选项

点击 Start using Jenkins

由于默认 jenkins 的密码较复杂,所以首先更改 admin 用户的密码

Jenkins 插件管理

通过安装包加载插件

  1. rz # 选择安装包(xshell 软件命令)

在 jenkins 插件目录中安装插件

  1. cd /var/lib/jenkins/plugins/

解压安装包

  1. tar xf plugins.tar.gz

将 plugins 中的文件全部复制到 jenkins 插件目录下

  1. cd plugins
  2. mv * /var/lib/jenkins/plugins/

检查是否复制成功

  1. cd /var/lib/jenkins/plugins/
  2. ll

重启 jenkins 服务

  1. systemctl restart jenkins

回到浏览器中会发现已加载插件(注:非必要不更新)

Jenkins 目录介绍

通过命令查看目录

  1. cd /var/lib/jenkins/plugins/
  2. rpm -ql jenkins

Jenkins 构建一个自由风格的软件项目

执行创建的构建任务

修改 jenkins 用户为 root 用户(方便后续认证管理)

  1. vim /etc/sysconfig/jenkins

重启 jenkins 服务

  1. systemctl restart jenkins

获取 gitlab 源代码

前提准备

安装 git

  1. yum -y install git

ssh 配置,进行权限认证

  1. ssh-keygen -t rsa # 加三次回车
  2. cat /root/.ssh/id_rsa.pub # 复制公钥,配置到 gitlab 上

点击“立即构建”,检查是否配置无误

也可以在终端查看是否拉取源代码成功

  1. cd /var/lib/jenkins/workspace/My-freestyle-job/
  2. ll

使用拉取的源代码部署 html 网站

在 ci-node1(10.0.0.11)上安装 httpd(Apache)服务,并配置服务端口为 10001

  1. cd
  2. yum -y install httpd
  1. vim /etc/httpd/conf/httpd.conf

重启 httpd 服务

  1. systemctl restart httpd

查看端口

  1. netstat -lnupt

在浏览器中访问 10.0.0.11:10001

配置 ci-node2(10.0.0.12)到 ci-node1(10.0.0.11)的 ssh 免密码登录

  1. ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.11
  2. ssh 10.0.0.11 # 测试是否配置成功
  3. exit # 断开连接

在 ci-node2(10.0.0.12)上编写打包脚本

  1. mkdir -p /server/scripts
  2. cd /server/scripts
  3. vim /server/scripts/deploy.sh

/server/scripts/deploy.sh

  1. #!/bin/bash
  2. #目标服务器 IP 地址
  3. host=$1
  4. #job 名称
  5. job_name=$2
  6. #包名
  7. name=web-$(date +%F)-$(($RANDOM+10000))
  8. #打包
  9. cd /var/lib/jenkins/workspace/${job_name} && tar czf /opt/${name}.tar.gz ./*
  10. #发送包到目标服务器
  11. ssh ${host} "cd /var/www/ && mkdir ${name}"
  12. scp /opt/${name}.tar.gz $host:/var/www/${name}
  13. #解包
  14. ssh ${host} "cd /var/www/${name} && tar xf ${name}.tar.gz && rm -f ${name}.tar.gz"
  15. #使用软链接方式部署服务
  16. ssh ${host} "cd /var/www && rm -rf html && ln -s /var/www/${name} /var/www/html"

/server/scripts/deploy.sh(无注释版)

  1. #!/bin/bash
  2. host=$1
  3. job_name=$2
  4. name=web-$(date +%F)-$(($RANDOM+10000))
  5. cd /var/lib/jenkins/workspace/${job_name} && tar czf /opt/${name}.tar.gz ./*
  6. ssh ${host} "cd /var/www/ && mkdir ${name}"
  7. scp /opt/${name}.tar.gz $host:/var/www/${name}
  8. ssh ${host} "cd /var/www/${name} && tar xf ${name}.tar.gz && rm -f ${name}.tar.gz"
  9. ssh ${host} "cd /var/www && rm -rf html && ln -s /var/www/${name} /var/www/html"

执行 deploy.sh 脚本

  1. sh /server/scripts/deploy.sh 10.0.0.11 My-freestyle-job

检查是否传输成功

  1. # 在 ci-node1(10.0.0.11)上
  2. ll /var/www/web-2023-08-30-39547
  3. # 在 ci-node2(10.0.0.12)上
  4. ll /opt/

在浏览器中访问 10.0.0.11:10001

在 Jenkins 中配置执行 deploy.sh 部署脚本

  1. # 在 Command 中添加 shell 命令,执行脚本
  2. sh /server/scripts/deploy.sh 10.0.0.11 ${JOB_NAME}

检查是否传输成功

  1. # 在 ci-node1(10.0.0.11)上
  2. ll /var/www/web-2023-08-30-31666
  3. # 在 ci-node2(10.0.0.12)上
  4. ll /opt/

Jenkins 配置 gitlab 自动触发构建(普通公司不建议使用,除非测试非常全面)

将 URL 和 Secret Token 配置到 gitlab 上

测试是否配置成功

gitlab 模拟测试

使用 ci-node1(10.0.0.11)测试

  1. cd
  2. git clone git@10.0.0.11:zylyehuo/monitor.git
  3. cd monitor/
  4. vim index.html

如图修改为 zylyehuo持续集成测试,进行测试

  1. git add .
  2. git commit -m "modify index.html on ci-node1"
  3. git push -u origin master

Jenkins 配置返回构建状态到 gitlab

获取 gitlab 的 Access Tokens

配置 jenkins

配置测试

改动 index.html 进行测试

  1. cd ~/monitor/
  2. vim index.html
  1. git add .
  2. git commit -m "modify index.html on ci-node1 second"
  3. git push -u origin master

Jenkins 安装、配置 maven(用于 Java 仓库)(Centos 7)

Maven 是一个项目管理和综合工具。Maven 提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven 使用标准的目录结构和默认构建生命周期。

Maven 简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。 Maven 增加可重用性并负责建立相关的任务。

Maven 项目的结构和内容在一个 XML 文件中声明,pom.xml 项目对象模型(POM),这是整个 Maven 系统的基本单元。用来管理项目的构建,相关性和文档。最强大的功能就是能够自动下载项目依赖库。

  1. cd /usr/local/src/
  2. rz # xshell 指令,选择 3.3.9版本的 maven 安装包
  3. tar xf apache-maven-3.3.9-bin.tar.gz
  4. mv apache-maven-3.3.9 /usr/local/

由于文件名字太长,故进行软连接

  1. cd /usr/local/
  2. ln -s /usr/local/apache-maven-3.3.9/ /usr/local/maven

检查是否安装成功

  1. /usr/local/maven/bin/mvn -v

将 mvn 命令加载到环境变量中

  1. vim /etc/profile
  2. # export PATH=/usr/local/apache-maven-3.3.9/bin/:$PATH
  3. source /etc/profile

检验是否配置成功

  1. mvn -v

上传一个 Java 项目进行测试使用

  1. cd /usr/local/maven/
  2. rz
  1. mv hello-world.tar.gz /root/
  2. tar xf hello-world.tar.gz

mvn 命令

位于有 pom.xml 文件的路径下

构建/打包

  1. mvn package # 第一次执行时间会比较久

清除上一次构建的结果

  1. mvn clean

测试

  1. mvn test

将打包好的 jar/war 文件复制到 .m2 本地仓库中,供其他模块使用

  1. mvn install

命令组合使用

  1. mvn clean package # 按照顺序执行,先清除上一次构建的结果,再构建/打包

Jenkins 安装、配置 nexus(搭建 Maven 私服)

Nexus 是一个强大的 Maven 仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。

Nexus 在代理远程仓库的同时维护本地仓库,以降低中央仓库的负荷,节省外网带宽和时间。

Nexus 是一套“开箱即用”的系统不需要数据库,它使用文件系统加 Lucene 来组织数据。

Nexus 使用 ExtJS 来开发界面,利用 Restlet 来提供完整的 REST APIs,通过 m2eclipse 与 Eclipse 集成使用。

Nexus 支持 WebDAV 与 LDAP 安全身份认证。

Nexus 还提供了强大的仓库管理功能,构件搜索功能,它基于 REST,友好的 UI 是一个 extjs 的 REST 客户端,它占用较少的内存,基于简单文件系统而非数据库。

在 ci-node3(10.0.0.13)上

  1. cd /usr/local/src/
  2. rz
  1. rpm -ivh jdk-8u121-linux-x64.rpm # 安装 jdk
  2. # java -version # 测试是否安装成功
  1. mv nexus-3.13.0-01-unix.tar.gz /usr/local/
  2. cd /usr/local/
  3. tar xf nexus-3.13.0-01-unix.tar.gz # 解压
  4. mv nexus-3.13.0-01-unix.tar.gz ./src/
  5. ln -s /usr/local/nexus-3.13.0-01/ /usr/local/nexus # 软连接

调整配置文件

  1. cd /usr/local/nexus/bin/
  2. vim nexus.rc

nexus 命令

启动 nexus(带输出)

  1. /usr/local/nexus/bin/nexus run

浏览器访问 10.0.0.13:8081,测试是否启动成功

启动 nexus(不带输出)

  1. /usr/local/nexus/bin/nexus start

停止 nexus

  1. /usr/local/nexus/bin/nexus stop

查看 nexus 状态

  1. /usr/local/nexus/bin/nexus status

使用 admin 默认账户登录 nexus

Maven 全局(整个项目)配置

  1. cd /usr/local/maven/conf/
  2. vim settings.xml
  1. <!--在<profiles></profiles>之间加入下面的配置-->
  2. <profile>
  3. <id>my-nexus</id>
  4. <repositories>
  5. <!-- 私有库地址-->
  6. <repository>
  7. <id>nexus</id>
  8. <name>nexus</name>
  9. <url>http://10.0.0.13:8081/repository/maven-public/</url>
  10. <snapshots>
  11. <enabled>true</enabled>
  12. </snapshots>
  13. <releases>
  14. <enabled>true</enabled>
  15. </releases>
  16. </repository>
  17. </repositories>
  18. <pluginRepositories>
  19. <!--插件库地址-->
  20. <pluginRepository>
  21. <id>nexus</id>
  22. <url>http://10.0.0.13:8081/repository/maven-public/</url>
  23. <releases>
  24. <enabled>true</enabled>
  25. </releases>
  26. <snapshots>
  27. <enabled>true</enabled>
  28. </snapshots>
  29. </pluginRepository>
  30. </pluginRepositories>
  31. </profile>
  32. <!--在<settings></settings>之间加入下面的配置,激活使用上面的配置-->
  33. <activeProfiles>
  34. <activeProfile>my-neuxs</activeProfile>
  35. </activeProfiles>
  36. <!--注:profile 名字要对应-->
  37. <!--在<mirros></mirros>之间加入如下配置-->
  38. <mirror>
  39. <id>nexus-myself</id>
  40. <!--*指的是访问任何仓库都使用我们的私服-->
  41. <mirrorOf>*</mirrorOf>
  42. <name>Nexus myself</name>
  43. <url>http://10.0.0.13:8081/repository/maven-public/</url>
  44. </mirror>

删除原先下载的 .m2 本地仓库,防止其直接在本地仓库下载,而不去访问远程仓库

  1. cd /root/hello-world
  2. rm -rf /root/.m2/
  3. mvn clean

此时可以发现,访问的远程仓库地址以及发生改变,代表私服已经配置成功

Jenkins 构建一个 maven 项目

在 gitlab 上新建项目,用于在 jenkins 中进行配置

将本地仓库进行 git 初始化

  1. git config --global user.name zylyehuo
  2. git config --global user.email 1369745233@qq.com
  3. git init
  4. git remote add origin git@10.0.0.11:root/helloworld.git
  5. git add .
  6. git commit -m "Initial commit"
  7. git push -u origin master

将 gitlab 仓库中 ssh 地址配置到 jenkins 中

测试是否配置成功

Jenkins 构建一个 Pipeline 项目

Jenkins pipeline 是 Jenkins 2.0 的精髓, ,是帮助 Jenkins 实现 CI 到 CD 转变的重要角色。简单来说,就是一套运行于 Jenkins 上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。Pipeline 的实现方式是一套 Groovy DSL,任何发布流程都可以表述为一段 Groovy 脚本,并且 Jenkins 支持从代码库直接读取脚本,从而实现了Pipeline as Code 的理念。

Pipeline 的基本概念

Stage:一个 Pipeline 可以划分为多个 Stage,每个 Stage 包含一组操作(Step)。注意一个 Stage 可以跨多个 Node 执行,即 Stage 实际上是 Step 的逻辑分组。

Node:一个 Node 就是一个 Jenkins 节点, 可以是 Master,或者是 Slave, 提供 Pipeline 中 Step 的具体运行环境。

Step:是最基本的操作单元,可以是创建一个目录、从代码库中 checkout 代码、执行一个 shell 命令、构建 Docker 镜像、将服务发布到 Kubernetes 集群中。Step 由 Jenkins 和 Jenkins Plugin 各种插件提供。

Jenkinsfile 语法

Jenkins Pipeline 支持两种语法, 一种 Declarative Pipeline(声明式), 一种 Scripted Pipeline(脚本式)。 声明式的 Pipeline 限制用户使用严格的预选定义的结构,是一种声明式的编程模型, 对比脚本式的 Pipeline 学习起来更加简单;脚本式的 Pipeline 限制比较少,结构和语法的限制由 Groovy 本身决定,是一种命令式的编程模型。一般来说 jenkinsfile 会被放在代码库的根目录下。当然也可以在 Web 页面定义。

Declarative Pipeline(声明式)(严格但简单)

声明式的 Pipeline 有严格的预定义格式结构, 最外层必须是 pipeline{},紧接着是 agent 指示 Jenkins 分配一个执行器和工作空间来执行下面的 Pipeline,stages 和 steps 是申明式 Jenkinsfile 必须的,所有的 stage 必须要定义在 stages 里,stage 的名称不能重复,每一个 stage 下的 step (具体的执行步骤)要定义在一个 steps 里

  1. pipeline {
  2. agent any
  3. stages {
  4. stage('Build') {
  5. steps {
  6. echo 'Building..'
  7. }
  8. }
  9. stage('Test') {
  10. steps {
  11. echo 'Testing..'
  12. }
  13. }
  14. stage('Deploy') {
  15. steps {
  16. echo 'Deploying....'
  17. }
  18. }
  19. }
  20. }

Scripted Pipeline(脚本式)(需要学习 Groovy 脚本语言)

在脚本式 jenkinsfile 里,你可以定义一个 node 或者多个 node 块,然后在 node 块里定义你的 stage,在 stage 里定义你的 step 即可。

  1. node {
  2. stage('Build') {
  3. //
  4. }
  5. stage('Test') {
  6. //
  7. }
  8. stage('Deploy') {
  9. //
  10. }
  11. }

通过 Web 页面创建 Pipeline 项目

测试效果

通过 SCM 获取 Jenkinsfile,创建 Pipeline 项目

在 gitlab 上的 monitor 仓库的根目录下创建一个 Jenkinsfile(名字尽量固定是这个)文件

  1. pipeline {
  2. agent any
  3. stages {
  4. stage('Stage 1') {
  5. steps {
  6. echo 'Hello world!'
  7. }
  8. }
  9. }
  10. }

在 Jenkins 新建一个 pipeline job

测试配置是否成功

在终端查看文件

  1. ll /var/lib/jenkins/workspace/My-pipeline-job01

部署到 httpd 服务下

修改 gitlab 中 Jenkinsfile 文件

此 Jenkinsfile 包括五个 stage,分为 replace file、unit test、package、deploy、test,对于非编译项目,一般包括这五个阶段。

  1. pipeline {
  2. agent any
  3. stages {
  4. stage('replace file') {
  5. steps {
  6. echo "replace config file use cp "
  7. }
  8. }
  9. stage('unit test') {
  10. steps {
  11. echo "unit test "
  12. }
  13. }
  14. stage('package') {
  15. steps {
  16. sh 'tar czf /opt/web-${BUILD_ID}.tar.gz ./* --exclude=./git --exclude=Jenkinsfile'
  17. }
  18. }
  19. stage('deploy') {
  20. steps {
  21. sh 'ssh 10.0.0.11 "cd /var/www && mkdir web-${BUILD_ID}"'
  22. sh 'scp /opt/web-${BUILD_ID}.tar.gz 10.0.0.11:/var/www/web-${BUILD_ID}'
  23. sh 'ssh 10.0.0.11 "cd /var/www/web-${BUILD_ID} && tar xf web-${BUILD_ID}.tar.gz && rm -f web-${BUILD_ID}.tar.gz"'
  24. sh 'ssh 10.0.0.11 "cd /var/www && rm -rf html && ln -s /var/www/web-${BUILD_ID}" /var/www/html'
  25. }
  26. }
  27. stage('test') {
  28. steps {
  29. echo "deploy after test "
  30. }
  31. }
  32. }
  33. }

在 jenkins 中点击“立即构建”,查看效果

在浏览器中访问 10.0.0.11:10001,查看效果

  1. systemctl start httpd # 若访问浏览器打不开,先检查服务是否启动

Pipeline 语法生成器(Pipeline Syntax)

原文链接:https://www.cnblogs.com/zylyehuo/p/17666172.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号