Jenkins 基础配置

博客地址: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)

posted @ 2023-08-31 15:21  zylyehuo  阅读(754)  评论(2编辑  收藏  举报