DevOps 之 Jenkins+GitLab+SonarQube (二)

四、jenkins部署与基础配置

  • https://jenkins.io/zh/ 参考

4.1 部署 jenkins

apt install openjdk-8-jre-headless # 提前准备 java 环境

# 或者
mkdir -m 755 /apps && cd /apps
tar xvf jdk-8u271-linux-x64.tar.gz  -C /apps
ln -sv /apps/jdk1.8.0_271/ /apps/jdk1.8
ln -s /apps/jdk1.8/bin/java /usr/bin/java
java -version

4.1.2 启动 Jenkins:

  • https://mirrors.tuna.tsinghua.edu.cn/jenkins/debian-stable/ #ubuntu 安装包下载
apt install daemon # 安装守护进程
dpkg -i jenkins_2.274_all.deb  # 安装
dpkg -c jenkins_2.274_all.deb # 查看配置文件

vim /etc/default/jenkins
MAXOPENFILES=65536
HTTP_PORT=8080
JENKINS_USER=root
JENKINS_GROUP=root

systemctl start jenkins
systemctl enable jenkins

4.1.3 jenkins 初始化

cat /var/lib/jenkins/secrets/initialAdminPassword
8e5b263d3e754bfd883f2366f1879c6b

image-20210414134416762

4.1.4 安装推荐的插件

image-20210414134644613

4.1.5 创建管理员用户

4.1.6 配置 jenkins URL

4.1.7 登陆 jenkins 界面

4.2 jenkins 插件管理及安装

  • 插件下载地址:http://updates.jenkins-ci.org/download/plugins/

4.2.1 安装中文插件

  • Manage Jenkins–Manage Plugins–搜索Chinese

重启后重新登录

4.2.2 新手入门插件

  • Folders
  • OWASP Markup Formatter
  • Build Timeout
  • Credentials Binding
  • Timestamper
  • Workspace Cleanup
  • Ant
  • Gradle
  • GitHub Branch Source
  • Pipeline: GitHub Groovy Libraries
  • SSH Slaves
  • Git
  • Subversion
  • Matrix Authorization Strategy
  • PAM Authentication
  • LDAP
  • Email Extension
  • GitLab
  • Gitlab Authentication
  • Gitlab Hook
  • Blue Ocean
  • Ansible
  • SaltStack
  • Parameterized Trigger
  • Build Pipeline
  • Build Authorization Token Root

4.3 其他jenkins安装方式

4.3.1 通过 jar 包直接启动 jenkins

java \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname="192.168.7.107 " \
-jar jenkins.war &

4.3.2 rpm 包安装 jenkins 配置

yum install java-1.8.0-openjdk-headless
rpm -ivh jenkins-2.274-1.1.noarch.rpm
systemctl start jenkins
systemctl enable jenkins

4.4 配置 jenkins 权限管理:

  • 基于角色的权限管理,先创建角色和用户,给角色授权,然后把用户管理到角色。

4.4.1 安装插件

4.4.2 创建新用户

  • Jenkins—系统管理—管理用户
    创建 xiaoming 和 xiaohong 2个用户

4.4.3 创建项目

  • 创建 app-1 和 sit-1 两个项目

4.4.4 更改认证方式

  • Jenkins—系统管理—全局安全配置
    默认创建的用户登录后可以做任何操作,取决于默认的认证授权方式。

4.4.5 创建角色并授权

  • Jenkins—系统管理–Manage and Assign Roles

4.4.6 将用户关联到角色

4.4.7 测试普通用户登录

4.5 jenkins 邮箱配置

4.5.1 配置 jenkins 管理员邮箱

  • Jenkins—系统管理—系统设置

4.5.2 邮件配置

4.5.3 测试发送邮件

4.6 配置 jenkins 自动拉取代码

基于ssh key 拉取gitlab代码

4.6.1 生成公钥私钥对

ssh-keygen
cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFuv51dkmWZcWXqY7PyDYVCdtFJbUkXBFYfU1JTBPi6Pso9wn/HXQN07gEqntiB1/HX+bqD4dYj1xYmfIEzPXxLCequVFUAyZXanTf3tmzyMyT6vJwz9g0u2BvFDYgHn6CFWRBW/M+DppjLCvYfpMA0/ph4DS451IDAxuK7aNE4E0o8/5nuriE+D4wcu8zuOjXRzW6fXavPWAU7nNmYjPAfWgeQlti10KJn+/EsQYp02sBewJv5MfHXtUnu93Q6T7CqEGVKRhW4PPLtZcXP9pEYvNiI6JCd00Ix4yvHUkKyzCHXMnHyvEShvvd2/SxQKTn+VFk+BfQY0jAJzOkOUsv root@ubuntu182

4.6.2 添加 ssh key(root) 至gitlab

4.6.3 测试 ssh key:

  • 测试可以不使用用户名密码后直接获取代码

4.7 jenkins简单代码部署

4.7.1 通过shell clone 代码并部署

前期准备

  • 配置基于ssh key 拉取gitlab代码
  • 配置jenkins服务器基于秘钥登录web端
    ssh-copy-id tomcat@192.168.7.105|6|7

添加shell命令

选择 job app1–>配置–>增加构建步骤–>执行shell

cd /data/app && rm -rf project-test1 && git clone git@192.168.7.101:group-test1/project-test1.git

ssh tomcat@192.168.7.107 "/etc/init.d/tomcat stop"
ssh tomcat@192.168.7.106 "/etc/init.d/tomcat stop"
ssh tomcat@192.168.7.105 "/etc/init.d/tomcat stop"

scp -r /data/app/project-test1/* tomcat@192.168.7.107:/apps/tomcat/tomcat_webapps/myapp
scp -r /data/app/project-test1/* tomcat@192.168.7.106:/apps/tomcat/tomcat_webapps/myapp
scp -r /data/app/project-test1/* tomcat@192.168.7.105:/apps/tomcat/tomcat_webapps/myapp

ssh tomcat@192.168.7.107 "/etc/init.d/tomcat start"
ssh tomcat@192.168.7.106 "/etc/init.d/tomcat start"
ssh tomcat@192.168.7.105 "/etc/init.d/tomcat start"

在 job 中构建

查看控制台输出信息

部署验证

4.7.2 通过jenkins clone代码并部署

jenkins 服务器添加证书:

  • Jenkins-系统管理-凭据-jenkins—全局—添加凭据

配置 git 项目地址和用户

通过 shell 部署

cd  /var/lib/jenkins/workspace/app-1 && tar czvf myapp.tar.gz  ./*

scp myapp.tar.gz tomcat@192.168.7.107:/apps/tomcat/tomcat_appdir/

ssh tomcat@192.168.7.107 "/etc/init.d/tomcat stop"

ssh tomcat@192.168.7.107 "cd /apps/tomcat/tomcat_appdir && rm -rf   /apps/tomcat/tomcat_webapps/myapp/* && tar xvf myapp.tar.gz  -C /apps/tomcat/tomcat_webapps/myapp/"

ssh tomcat@192.168.7.107 "/etc/init.d/tomcat start"

构建并查看控制台输出信息

部署验证

4.8 gitlab 创建分支及合并代码

4.8.1 基于 master 创建分支

4.8.2 克隆dev分支

# 克隆dev分支
git clone -b dev http://192.168.7.101/group-test1/project-test1.git

### 修改代码后上传
cd project-test1/
vim index.html
<h1>111 v1</h1>
<h1>222 v2</h1>
<h1>333 v3</h1>
<h1>444 v4</h1>
<h1>555 v5</h1>

git add .
git commit -m "v5"
git push

4.8.3 指定dev分钟部署

4.8.4 构建后验证

4.8.5 合并代码

  • 主页–合并请求–新建合并请求–比较分支后继续

4.8.6 合并邮箱提醒

4.8.7 审批合并请求

4.8.8 验证

4.9 构建触发器(钩子)

  • 构建触发器 (webhook),有的人称为钩子,实际上是一个 HTTP 回调,其用于在开发人员向 gitlab 提交代码后能够触发 jenkins 自动执行代码构建操作。
  • 以下为新建一个开发分支,只有在开发人员向开发 (develop) 分支提交代码的时候才会触发代码构建,而向主分支提交的代码不会自动构建,需要运维人员手动部署代码到生产环境。

4.9.1 jenkins 安装插件

  • 系统管理-管理插件-可选插件-Gitlab Hook 和 Gitlab Authentication

4.9.2 jenkins 修改登录认证方式

  • 参考 https://jenkins.io/security/advisory/2018-05-09/#SECURITY-263
    • 在 jenkins 系统管理–全局安全设置,认证改为登录用户可以做任何事情
    • 取消跨站请求伪造保护
    • Gitlab Hook Plugin 以纯文本形式存储和显示 GitLab API 令牌

修改认证

取消跨站请求伪造保护

# 在 Jenkins 启动前加入相关取消保护的参数配置后启动 Jenkins,即可关闭 CSRF
vim /etc/default/jenkins
JAVA_ARGS="-Djava.awt.headless=true -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true"

4.9.3 jenkins 新建 dev job

4.9.4 jenkins 构建 shell 命令

  • 构建命令为简单的测试命令,比如输出当前的账户信息

4.9.5 jenkins 配置构建触发器

  • 生产 token 认证
<root@ubuntu182 data>#openssl rand -hex 12
7c17d068b5af13eba4807e52

4.9.6 jenkins 验证分支 job 配置文件

vim /var/lib/jenkins/jobs/app-1/config.xml

4.9.7 curl 命令测试触发并验证远程触发构建

curl http://192.168.7.102:8080/job/app-1/build?token=7c17d068b5af13eba4807e52

jenkins 验证 job 是否自动构建

4.9.8 gitlab 配置 webhook

4.9.9 测试钩子可用性

4.9.10 jenkins 执行 shell 命令

cd  /var/lib/jenkins/workspace/app-1 && tar czvf myapp.tar.gz  ./*

scp myapp.tar.gz tomcat@192.168.7.107:/apps/tomcat/tomcat_appdir/

ssh tomcat@192.168.7.107 "/etc/init.d/tomcat stop"

ssh tomcat@192.168.7.107 "cd /apps/tomcat/tomcat_appdir && rm -rf   /apps/tomcat/tomcat_webapps/myapp/* && tar xvf myapp.tar.gz  -C /apps/tomcat/tomcat_webapps/myapp/"

ssh tomcat@192.168.7.107 "/etc/init.d/tomcat start"

4.9.11 gitlab 开发分支 develop 测试提交代码

# 克隆dev分支
git clone -b dev http://192.168.7.101/group-test1/project-test1.git

### 修改代码后上传
cd project-test1/
vim index.html
<h1>111 v1</h1>
<h1>222 v2</h1>
<h1>333 v3</h1>
<h1>444 v4</h1>
<h1>555 v5</h1>
<h1>666 v6</h1>

git add .
git commit -m "v6"
git push

4.9.12 验证

4.10 jenkins 构建项目关联

  • 用于多个 job 相互关联,需要串行执行多个 job 的场景,可以通过安装插件 Parameterized
    Trigger 触发执行其他 project。

4.10.1 新建多个 job

停服务

ssh tomcat@192.168.7.107 "/etc/init.d/tomcat stop"

部署代码

cd /data/app && rm -rf project-test1 && git clone git@192.168.7.101:group-test1/project-test1.git
scp -r /data/app/project-test1/* tomcat@192.168.7.107:/apps/tomcat/tomcat_webapps/myapp

起服务

ssh tomcat@192.168.7.107 "/etc/init.d/tomcat start"

4.10.2 配置构建后操作

4.10.3 验证

4.11 jenkins 视图

  • 视图可用于归档 job 进行分组显示,比如将一个业务的视图放在一个视图显示,安装
    完成 build pipeline 插件之后将会有一个+号用于创建视图

4.11.1 安装 build pipeline 插件

4.11.2 创建 pipline 视图

定义视图配置信息

web 显示界面

4.11.3 列表视图

  • 列表视图使用场景比较多,用于将一个业务的 job 保存至一个列表视图进行分类管理,即不同业务的 job 放在不同的列表视图中

最终状态

我的视图

  • 我的视图会显示当前账户有权限访问的 job,因此需要提前划分好权限

4.12 jenkins 分布式

  • 在众多 Job 的场景下,单台 jenkins master 同时执行代码 clone、编译、打包及构建,其性能可能会出现瓶颈从而会影响代码部署效率,影响 jenkins 官方提供了 jenkins 分布式构建,将众多 job 分散运行到不同的 jenkins slave 节点,大幅提高并行 job 的处理能力。

4.12.1 添加 slave 节点

节点环境准备

apt install openjdk-8-jre-headless
mkdir -p /var/lib/jenkins #创建数据目录

web 添加 slave 节点

新建节点
  • Jenkins—系统管理—节点管理—新建节点

添加 slave 认证凭据

slave 节点最终信息

jenkins slave 创建日志

验证 slave web 状态

验证 slave 进程状态

4.12.2 限制 job 的运行节点为slave

配置 jenkins slav 基于ssh key 拉取gitlab代码

配置 jenkins slave 服务器基于秘钥登录web端

ssh-copy-id tomcat@192.168.7.107

job配置

4.12.3 执行构建并验证

4.13 Pipeline

  • 官方介绍;https://jenkins.io/2.0/
  • Pipeline 是帮助 Jenkins 实现 CI 到 CD 转变的重要角色,是运行在 jenkins 2.X 版本的核心插件,简单来说 Pipeline 就是一套运行于 Jenkins 上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程,从而实现单个任务很难实现的复杂流程编排和任务可视化,Pipeline 的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段 Groovy 脚本。

4.13.1 Pipeline 语法

  • Stage:阶段,一个 pipline 可以划分为若干个 stage,每个 stage 都是一个操作步骤,比如 clone 代码、代码编译、代码测试和代码部署,阶段是一个逻辑分组,可以跨多个 node 执行。
  • Node:节点,每个 node 都是一个 jenkins 节点,可以是 jenkins master 也可以是jenkins agent,node 是执行 step 的具体服务器。
  • Step:步骤,step 是 jenkins pipline 最基本的操作单元,从在服务器创建目录到构建容器镜像,由各类 Jenkins 插件提供实现,一个 stage 中可以有多个 step,例如: sh “make”

4.13.2 Pipeline 优势:

  • 可持续性:jenkins 的重启或者中断后不影响已经执行的 Pipline Job
  • 支持暂停:pipline 可以选择停止并等待人工输入或批准后再继续执行。
  • 可扩展:通过 groovy 的编程更容易的扩展插件。
  • 并行执行:通过 groovy 脚本可以实现 step,stage 间的并行执行,和更复杂的相互依赖关系。

4.13.3 Pipeline 安装

4.13.4 Pipeline job 测试

创建 Pipeline job

测试简单 Pipeline job 运行

node {
  stage("clone 代码"){
    echo "代码 clone"
  }
  stage("代码构建"){
    echo "代码构建"
  }
  stage("代码测试"){
    echo "代码测试"
  }
  stage("代码部署"){
    echo "代码部署"
  }
}

执行 Pipeline job

4.13.5 Pipeline job 部署服务

制作部署脚本

点击 流水线语法 跳转至生成脚本 URL

生成拉取代码的流水线脚本

完整脚本
node {
  stage("删除上次构建代码"){
    sh 'cd  /var/lib/jenkins/workspace/Pipeline-test && rm -rf  *'
  }
  stage("clone 代码"){
    git branch: 'dev', url: 'git@192.168.7.101:group-test1/project-test1.git'
  }
  stage("停止服务"){
    sh 'ssh tomcat@192.168.7.107 "/etc/init.d/tomcat stop"'
  }
  stage("代码部署"){
    sh '''cd  /var/lib/jenkins/workspace/Pipeline-test && tar czvf myapp.tar.gz     ./*
    scp myapp.tar.gz tomcat@192.168.7.107:/apps/tomcat/tomcat_appdir/
    ssh tomcat@192.168.7.107 "cd /apps/tomcat/tomcat_appdir && rm -rf   /apps/tomcat/tomcat_webapps/myapp/* && tar xvf myapp.tar.gz  -C /apps/tomcat/tomcat_webapps/myapp/"'''
  }
  stage("启动服务"){
    sh 'ssh tomcat@192.168.7.107 "/etc/init.d/tomcat start"'
  }
}

执行构建

验证构建

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇