Jenkins 基础配置

jenkins,基础,配置 · 浏览次数 : 397

小编点评

**Pipeline 语法** * **声明式 Pipeline**: ```groovy pipeline { agent any stages { stage('Build') { steps { echo 'Building..' } } stage('Test') { steps { echo 'Testing..' } } stage('Deploy') { steps { echo 'Deploying....' } } } } ``` * **脚本式 Pipeline**: ```groovy node { stage('Build') { steps { echo 'Hello world!' } } stage('Test') { steps { echo 'Unit test ' } } stage('Package') { steps { sh 'tar czf /opt/web-${BUILD_ID}.tar.gz ./* --exclude=./git --exclude=Jenkinsfile' } } stage('Deploy') { steps { sh 'ssh 10.0.0.11 \"cd /var/www && mkdir web-${BUILD_ID}\"' sh 'scp /opt/web-${BUILD_ID}.tar.gz 10.0.0.11:/var/www/web-${BUILD_ID}' 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\"' sh 'ssh 10.0.0.11 \"cd /var/www && rm -rf html && ln -s /var/www/web-${BUILD_ID}\" /var/www/html'` } } stage('test') { steps { echo 'Deploy after test ' } } } ```

正文

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

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

jenkins 下一切皆文件

虚拟机基本配置

Jenkins 安装

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

下载完安装包如下所示

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

rpm -ivh jdk-8u121-linux-x64.rpm
# java -version  # 检验是否安装成功

rpm -ivh jenkins-2.99-1.1.noarch.rpm

启动 jenkins 服务

systemctl start jenkins

设置 jenkins 服务开机自启

systemctl enable jenkins

查看 jenkins 服务启动状态

systemctl status jenkins

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

netstat -lnupt

Jenkins 初始化配置

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

查询本机 ip 的方式

ip addr

获取初始化密码

cat /var/lib/jenkins/secrets/initialAdminPassword

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

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

点击 Start using Jenkins

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

Jenkins 插件管理

通过安装包加载插件

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

在 jenkins 插件目录中安装插件

cd /var/lib/jenkins/plugins/

解压安装包

tar xf plugins.tar.gz

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

cd plugins

mv * /var/lib/jenkins/plugins/

检查是否复制成功

cd /var/lib/jenkins/plugins/

ll

重启 jenkins 服务

systemctl restart jenkins

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

Jenkins 目录介绍

通过命令查看目录

cd /var/lib/jenkins/plugins/

rpm -ql jenkins

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

执行创建的构建任务

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

vim /etc/sysconfig/jenkins

重启 jenkins 服务

systemctl restart jenkins

获取 gitlab 源代码

前提准备

安装 git

yum -y install git

ssh 配置,进行权限认证

ssh-keygen -t rsa  # 加三次回车

cat /root/.ssh/id_rsa.pub  # 复制公钥,配置到 gitlab 上

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

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

cd /var/lib/jenkins/workspace/My-freestyle-job/

ll

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

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

cd

yum -y install httpd
vim /etc/httpd/conf/httpd.conf

重启 httpd 服务

systemctl restart httpd

查看端口

netstat -lnupt

在浏览器中访问 10.0.0.11:10001

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

ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.11

ssh 10.0.0.11  # 测试是否配置成功

exit  # 断开连接

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

mkdir -p /server/scripts

cd /server/scripts

vim /server/scripts/deploy.sh

/server/scripts/deploy.sh

#!/bin/bash

#目标服务器 IP 地址
host=$1

#job 名称
job_name=$2

#包名
name=web-$(date +%F)-$(($RANDOM+10000))

#打包
cd /var/lib/jenkins/workspace/${job_name} && tar czf /opt/${name}.tar.gz ./*

#发送包到目标服务器
ssh ${host} "cd /var/www/ && mkdir ${name}"
scp /opt/${name}.tar.gz $host:/var/www/${name}

#解包
ssh ${host} "cd /var/www/${name} && tar xf ${name}.tar.gz && rm -f ${name}.tar.gz"

#使用软链接方式部署服务
ssh ${host} "cd /var/www && rm -rf html && ln -s /var/www/${name} /var/www/html"

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

#!/bin/bash

host=$1
job_name=$2
name=web-$(date +%F)-$(($RANDOM+10000))

cd /var/lib/jenkins/workspace/${job_name} && tar czf /opt/${name}.tar.gz ./*
ssh ${host} "cd /var/www/ && mkdir ${name}"
scp /opt/${name}.tar.gz $host:/var/www/${name}
ssh ${host} "cd /var/www/${name} && tar xf ${name}.tar.gz && rm -f ${name}.tar.gz"
ssh ${host} "cd /var/www && rm -rf html && ln -s /var/www/${name} /var/www/html"

执行 deploy.sh 脚本

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

检查是否传输成功

# 在 ci-node1(10.0.0.11)上
ll /var/www/web-2023-08-30-39547

# 在 ci-node2(10.0.0.12)上
ll /opt/

在浏览器中访问 10.0.0.11:10001

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

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

检查是否传输成功

# 在 ci-node1(10.0.0.11)上
ll /var/www/web-2023-08-30-31666

# 在 ci-node2(10.0.0.12)上
ll /opt/

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

将 URL 和 Secret Token 配置到 gitlab 上

测试是否配置成功

gitlab 模拟测试

使用 ci-node1(10.0.0.11)测试

cd

git clone git@10.0.0.11:zylyehuo/monitor.git

cd monitor/

vim index.html

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

git add .

git commit -m "modify index.html on ci-node1"

git push -u origin master

Jenkins 配置返回构建状态到 gitlab

获取 gitlab 的 Access Tokens

配置 jenkins

配置测试

改动 index.html 进行测试

cd ~/monitor/

vim index.html
git add .

git commit -m "modify index.html on ci-node1 second"

git push -u origin master

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

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

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

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

cd /usr/local/src/

rz  # xshell 指令,选择 3.3.9版本的 maven 安装包

tar xf apache-maven-3.3.9-bin.tar.gz

mv apache-maven-3.3.9 /usr/local/

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

cd /usr/local/

ln -s /usr/local/apache-maven-3.3.9/ /usr/local/maven

检查是否安装成功

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

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

vim /etc/profile
# export PATH=/usr/local/apache-maven-3.3.9/bin/:$PATH

source /etc/profile

检验是否配置成功

mvn -v

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

cd /usr/local/maven/

rz
mv hello-world.tar.gz /root/

tar xf hello-world.tar.gz

mvn 命令

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

构建/打包

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

清除上一次构建的结果

mvn clean

测试

mvn test

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

mvn install

命令组合使用

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)上

cd /usr/local/src/

rz
rpm -ivh jdk-8u121-linux-x64.rpm  # 安装 jdk
# java -version  # 测试是否安装成功
mv nexus-3.13.0-01-unix.tar.gz /usr/local/

cd /usr/local/

tar xf nexus-3.13.0-01-unix.tar.gz  # 解压

mv nexus-3.13.0-01-unix.tar.gz ./src/

ln -s /usr/local/nexus-3.13.0-01/ /usr/local/nexus  # 软连接

调整配置文件

cd /usr/local/nexus/bin/

vim nexus.rc

nexus 命令

启动 nexus(带输出)

/usr/local/nexus/bin/nexus run

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

启动 nexus(不带输出)

/usr/local/nexus/bin/nexus start

停止 nexus

/usr/local/nexus/bin/nexus stop

查看 nexus 状态

/usr/local/nexus/bin/nexus status

使用 admin 默认账户登录 nexus

Maven 全局(整个项目)配置

cd /usr/local/maven/conf/

vim settings.xml
<!--在<profiles></profiles>之间加入下面的配置-->
<profile>
  <id>my-nexus</id>
  <repositories>
  <!-- 私有库地址-->
    <repository>
      <id>nexus</id>
      <name>nexus</name>
      <url>http://10.0.0.13:8081/repository/maven-public/</url>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
      <releases>
        <enabled>true</enabled>
      </releases>
    </repository>
  </repositories>
  <pluginRepositories>
  <!--插件库地址-->
    <pluginRepository>
      <id>nexus</id>
      <url>http://10.0.0.13:8081/repository/maven-public/</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </pluginRepository>
  </pluginRepositories>
</profile>

<!--在<settings></settings>之间加入下面的配置,激活使用上面的配置-->
<activeProfiles>
  <activeProfile>my-neuxs</activeProfile>
</activeProfiles>
<!--注:profile 名字要对应-->

<!--在<mirros></mirros>之间加入如下配置-->
<mirror>
  <id>nexus-myself</id>
  <!--*指的是访问任何仓库都使用我们的私服-->
  <mirrorOf>*</mirrorOf>
  <name>Nexus myself</name>
  <url>http://10.0.0.13:8081/repository/maven-public/</url>
</mirror>

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

cd /root/hello-world

rm -rf /root/.m2/

mvn clean

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

Jenkins 构建一个 maven 项目

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

将本地仓库进行 git 初始化

git config --global user.name zylyehuo

git config --global user.email 1369745233@qq.com

git init

git remote add origin git@10.0.0.11:root/helloworld.git

git add .

git commit -m "Initial commit"

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 里

pipeline {
  agent any

  stages {
    stage('Build') {
      steps {
        echo 'Building..'
      }
    }
    stage('Test') {
      steps {
        echo 'Testing..'
      }
    }
    stage('Deploy') {
      steps {
        echo 'Deploying....'
      }
    }
  }
}

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

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

node {
  stage('Build') {
    //
  }
  stage('Test') {
    //
  }
  stage('Deploy') {
    //
  }
}

通过 Web 页面创建 Pipeline 项目

测试效果

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

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

pipeline {
    agent any
    stages {
        stage('Stage 1') {
            steps {
                echo 'Hello world!'
            }
        }
    }
}

在 Jenkins 新建一个 pipeline job

测试配置是否成功

在终端查看文件

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

部署到 httpd 服务下

修改 gitlab 中 Jenkinsfile 文件

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

pipeline {
  agent any

  stages {
    stage('replace file') {
      steps {
        echo "replace config file use cp "
      }
    }

    stage('unit test') {
      steps {
        echo "unit test "
      }
    }

    stage('package') {
      steps {
        sh 'tar czf /opt/web-${BUILD_ID}.tar.gz ./* --exclude=./git --exclude=Jenkinsfile'
      }
    }

    stage('deploy') {
      steps {
        sh 'ssh 10.0.0.11 "cd /var/www && mkdir web-${BUILD_ID}"'
        sh 'scp /opt/web-${BUILD_ID}.tar.gz 10.0.0.11:/var/www/web-${BUILD_ID}'
        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"'
        sh 'ssh 10.0.0.11 "cd /var/www && rm -rf html && ln -s /var/www/web-${BUILD_ID}" /var/www/html'
      }
    }

    stage('test') {
      steps {
        echo "deploy after test "
      }
    }
  }
}

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

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

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

Pipeline 语法生成器(Pipeline Syntax)

与Jenkins 基础配置相似的内容:

Jenkins 基础配置

博客地址:https://www.cnblogs.com/zylyehuo/ 参考链接 解决:Jenkins: signature verification failed in update site ‘default‘ (show details) jenkins 下一切皆文件 虚拟机基本配置 J

【Jenkins系列】快速创建Jenkins Job

Jenkins Job 类型 1.Freestyle project 这个是jenkins的基础功能,可以用它来执行各种构建任务,他只能构建在一个电脑上,如果没有太多的需求,这个job基本够用了,它包含了所有基础功能. 2.Pipeline 真实的工作环境有很多job,比如先编译,然后执行静态代码检

Jenkins 简述及其搭建

什么是持续集成? 持续集成(CI)是在软件开发过程中自动化和集成许多团队成员的代码更改和更新的过程。在 CI 中,自动化工具在集成之前确认软件代码是有效且无错误的,这有助于检测错误并加快新版本的发布。 什么是持续交付? 持续交付 (CD) 是指每天多次将新软件投入生产,自动将应用程序交付到基础设施环

Jenkins快速入门部署+实践

安装 方法一 Jenkins中文网下载jenkins.war 方法二 直接从http://mirrors.jenkins-ci.org/war/latest/jenkins.war 下载最新的war包,然后解压到某个固定目录就算安装完成了 启动方式 启动方法: java -jar jenkins.w

[转帖]jenkins 需要java11

https://www.cnblogs.com/zhoading/p/17079947.html 开源 Devops 工具 Jenkins 宣布: 从 6 月 28 日发布的 Jenkins 2.357 和即将发布的 9 月 LTS 版本开始,Jenkins 最低需要 Java 11。 Jenkin

[转帖]20191022-从Jenkins NativeOOM到Java8内存

我把老掉牙的Jenkins升级了,它跑了几天好好的;后来我有一个python脚本使用JenkinsAPI 0.3.9每隔2.5分钟发送约300余get请求,结果过了3天,它就挂了;当我开两个脚本时,40.5小时就挂了。(可以通过搜索Jenkins日志/var/log/jenkins/* 中字符Jen

超详细的 Jenkins 安全tips

Jenkins 作为一个开放的、可定制的平台,即使在默认状态下也提供了不错的安全性。但是鉴于 Jenkins 连接了许多行业工具,因此也存在一定安全隐患。本篇文章将会介绍一些方法和工具,来确保 Jenkins 实例的安全和可靠,同时也给使用 Jenkins 的用户提供安全保障。 保持更新 软件漏洞随

【Jenkins系列】-Pipeline语法全集

Jenkins为您提供了两种开发Pipeline的方式:脚本式和声明式。 脚本式流水线(也称为“传统”流水线)基于Groovy作为其特定于域的语言。 而声明式流水线提供了简化且更友好的语法,并带有用于定义它们的特定语句,而无需学习Groovy。声明式流水线语法错误在脚本开始时报告。这是一个很好的功能

Jenkins 命令执行 -- jetty 敏感信息泄露 --(CVE-2021-2816)&&(CVE-2017-1000353)&&(CVE-2018-1000861)

Jenkins 命令执行 -- jetty 敏感信息泄露 --(CVE-2021-2816)&&(CVE-2017-1000353)&&(CVE-2018-1000861) jetty 敏感信息泄露(CVE-2021-28169) 漏洞简介 对于 <= 9.4.40、<= 10.0.2、<= 11.

Jenkins 手动安装插件

手动装插件太麻烦了,还是装最新版 Jenkins 配置源 然后在Manage Plugins -->Manage Plugins -->Advanced 中,把Update Site修改为国内插件地址 http://mirror.tuna.tsinghua.edu.cn/jenkins/update