首页
Linux教程
Linux实战教程
Shell教程
Mysql教程
Keepalived教程
Linux基础教程
Linux进阶教程
运维题库
运维干货
视频教程
运维资讯
资源下载
关于我们
首页 运维干货都2022年了,你还不会部署Jenkins?10分钟带你搞定

都2022年了,你还不会部署Jenkins?10分钟带你搞定

1.1 Jenkins介绍

官网 jenkins.io
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

1.2 为什么要使用Jenkins?

我们可以通过jenkins工具平台实现全自动部署+测试,是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins非常易于安装和配置,简单易用。 简单来说方便如下人员:

  1. 开发人员:
    • 写好代码,不需要自己进行源码编译、打包等工作,直接将代码分支存放在SVN、GIT仓库即可
  2. 运维人员:
    • 减轻人工干预的错误率,ansible 一键完成了,同时解放运维人员繁杂的上传代码、手动备份、更新
  3. 测试人员:
    • 可以通过jenkins进行简单的代码及网站测试

1.3 持续集成的意义

  1. 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,利于减少重复过程以节省时间、费用和工作量
  2. 持续集成保障了每个时间点上团队成员提交的代码是能成功集成的,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能
  3. 持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心

1.4 持续集成和非持续集成的区别

1)非持续集成

2)持续集成

1.5 安装Jenkins

1.5.1 搭建环境

# 关闭防火墙和selinux
[root@oldboy-jenkins ~]# systemctl stop firewalld.service 
[root@oldboy-jenkins ~]# systemctl disable firewalld.service 
[root@oldboy-jenkins ~]# setenforce 0
[root@oldboy-jenkins ~]# vim /etc/selinux/config
[root@oldboy-jenkins ~]# egrep  -v "^$|#" /etc/selinux/config 
SELINUX=disabled
SELINUXTYPE=targeted 

# yum 安装JDK
[root@oldboy-jenkins ~]# yum install java-1.8.0-openjdk.x86_64

# 进入链接下载rpm安装包
# https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
# 本地上传rpm包安装
[root@oldboy-jenkins ~]# rpm -ivh jdk-8u322-linux-x64.rpm

# 编译安装JDK
[root@oldboy-jenkins ~]# wget https://javadl.oracle.com/webapps/download/GetFile/1.8.0_301-b09/d3c52aa6bfa54d3ca74e617f18309292/linux-i586/jdk-8u301-linux-x64.tar.gz
[root@oldboy-jenkins ~]# ls -l
total 149480
-rw-r--r--  1 root root  145520298 Jun  9  2021 jdk-8u301-linux-x64.tar.gz
[root@oldboy-jenkins ~]# tar zxf jdk-8u301-linux-x64.tar.gz -C /oldboyedu/softwares/
[root@oldboy-jenkins ~]# 
[root@oldboy-jenkins ~]# cd /oldboyedu/softwares/
[root@oldboy-jenkins softwares]# ls -l
total 4
drwxr-xr-x 8 10143 10143 4096 Jun  9  2021 jdk1.8.0_301
[root@oldboy-jenkins softwares]# ln -s jdk1.8.0_301/ jdk
[root@oldboy-jenkins softwares]# ll
total 4
lrwxrwxrwx 1 root  root    13 Apr 11 15:53 jdk -> jdk1.8.0_301/
drwxr-xr-x 8 10143 10143 4096 Jun  9  2021 jdk1.8.0_301
[root@oldboy-jenkins softwares]# cat >/etc/profile.d/jdk.sh<<'EOF'
#!/bin/bash

export JAVA_HOME=/oldboyedu/softwares/jdk
export PATH=\$PATH:\$JAVA_HOME/bin
EOF
[root@oldboy-jenkins softwares]# source /etc/profile.d/jdk.sh

# 检查JDK是否安装成功
[root@oldboy-jenkins softwares]# java -version
java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)
[root@oldboy-es01 softwares]# 

1.5.2 安装 Jenkins

[root@oldboy-jenkins ~]# wget http://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.304-1.1.noarch.rpm  #获取django安装包
[root@oldboy-jenkins ~]# rpm -ivh jenkins-2.304-1.1.noarch.rpm 

1.5.3 配置 Jenkins

[root@oldboy-jenkins ~]# vim /etc/sysconfig/jenkins 
[root@oldboy-jenkins ~]# egrep -v "^$|#" /etc/sysconfig/jenkins
JENKINS_HOME="/var/lib/jenkins"
JENKINS_JAVA_CMD=""    # 编译安装JDK请输入java的安装路径
JENKINS_USER="root"
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true"
JENKINS_PORT="8080"
JENKINS_LISTEN_ADDRESS=""
JENKINS_HTTPS_PORT=""
JENKINS_HTTPS_KEYSTORE=""
JENKINS_HTTPS_KEYSTORE_PASSWORD=""
JENKINS_HTTPS_LISTEN_ADDRESS=""
JENKINS_HTTP2_PORT=""
JENKINS_HTTP2_LISTEN_ADDRESS=""
JENKINS_DEBUG_LEVEL="5"
JENKINS_ENABLE_ACCESS_LOG="no"
JENKINS_HANDLER_MAX="100"
JENKINS_HANDLER_IDLE="20"
JENKINS_EXTRA_LIB_FOLDER=""
JENKINS_ARGS=""

1.5.4 启动 Jenkins

[root@oldboy-jenkins ~]# systemctl start jenkins    # 启动
[root@oldboy-jenkins ~]# systemctl enable jenkins   # 开机自启

1.5.5 访问 Jenkins 页面

1.5.7 Manage Jenkins报错

1.5.6 本地直接上传插件

跳过安装插件,直接上传插件到目录

# 上传插件至服务器
# 解压插件至 /var/lib/jenkins/
[root@oldboy-jenkins ~]# tar xf jenkins_plugins.tar.gz -C /var/lib/jenkins/
[root@oldboy-jenkins ~]# cd /var/lib/jenkins/plugins/
[root@oldboy-jenkins plugins]# ls
ace-editor                              javax-activation-api              pipeline-stage-view
ace-editor.jpi                          javax-activation-api.jpi          pipeline-stage-view.bak
ant                                     javax-mail-api                    pipeline-stage-view.jpi
antisamy-markup-formatter               javax-mail-api.jpi                plain-credentials
# 下面还有一堆

jenkins主要目录

路径 作用
/usr/lib/jenkins/ jenkins安装目录,WAR包会放在这里
/etc/sysconfig/jenkins jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在这里配置
/var/lib/jenkins/ 默认的JENKINS_HOME
/var/log/jenkins/jenkins.log Jenkins日志文件

浏览器访问

完成

1.6 Jenkins自由风格项目创建

1.6.1 新建项目

1.6.2 项目配置

完成后保存

立即构建,然后查看控制台输出

1.6.3 服务器之间配置免密登录

[root@oldboy-jenkins .ssh]# ssh-keygen # 连续回车
[root@oldboy-jenkins .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.56.130 # 传到你要免密登录的服务器上

1.6.4写一个脚本把从git仓库里获取的代码上传到web服务器站点目录下

#!/bin/sh
DATE=(date +%Y-%m-%d-%H-%M-%S)
CODE_DIR="/var/lib/jenkins/workspace/test"
WEB_DIR="/usr/share/nginx/"
get_code_tar(){
        cdCODE_DIR && tar zcf /opt/web-DATE.tar.gz ./*
}

scp_code_web(){
        scp /opt/web-DATE.tar.gz 192.168.56.130:WEB_DIR
}

code_tarxf(){
        ssh 192.168.56.130 "cdWEB_DIR &&mkdir web-DATE && tar xf web-DATE.tar.gz -C web-DATE"

}
ln_html(){
         ssh 192.168.56.130 "cdWEB_DIR && rm -rf html && ln -s web-$DATE html"
}

main(){

        get_code_tar;
        scp_code_web;
        code_tarxf;
        ln_html;
}
main

1.6.5 配置自动触发构建、需要设置安全令牌Secret token

GitLab配置安全令牌

1.6.6 克隆代码到master上更改代码后进行推送测试是否自动触发

[root@oldboy-git test]# git clone http://192.168.56.144/root/test.git
Cloning into 'test'...
Username for 'http://192.168.56.144': root
Password for 'http://root@192.168.56.144': 
remote: Counting objects: 8, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 8 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (8/8), done.
[root@oldboy-git ~]# ls
index.html  test
[root@oldboy-git ~]# ls test/
index.html

# 更改代码并推送
[root@oldboy-git ~]# cd test/
[root@oldboy-git test]# vim index.html
[root@oldboy-git test]# cat index.html
jenkins
[root@oldboy-git test]# git add index.html
[root@oldboy-git test]# git commit -m "nginx-v0.4"
[master 145c0a9] nginx-v0.4
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@oldboy-git test]# git push -u origin 
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

Username for 'http://192.168.56.144': root
Password for 'http://root@192.168.56.144': 
Counting objects: 5, done.
Writing objects: 100% (3/3), 243 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://192.168.56.144/root/test.git
   e2cbc69..145c0a9  master -> master
Branch master set up to track remote branch master from origin.
[root@oldboy-git test]# 

1.6.7 GitLab报错Hook executed successfully but returned HTTP 403

这说明你没开启【去掉跨站点请求伪造】

# 在Jenkins服务器上操作
[root@oldboy-jenkins ~]# vim /etc/sysconfig/jenkins 
[root@oldboy-jenkins ~]# egrep -v "^$|#" /etc/sysconfig/jenkins
... # 滤过
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true"
...# 滤过
# 如果是204一下版本的jenkins请在web 页面中勾选

1.7 Jenkins实现参数化构建

1.7.1 参数化构建介绍

参数化构建,通过tag传递参数达到发布和代码回滚的操作

1.7.2 安装插件

注: 接下来安装插件、在可选插件中搜索Git Parameter 直接安装即可,已安装则忽略次步骤
进入到项目把前面的参数化去掉重新选择使用git parameter

1.7.3 正式配置

1.7.4 脚本传参

[root@oldboy-jenkins plugins]# vim /server/scripts/deploy_rollback.sh 
[root@oldboy-jenkins plugins]# cat /server/scripts/deploy_rollback.sh
#!/bin/sh
DATE=(date +%Y-%m-%d-%H-%M-%S)
CODE_DIR="/var/lib/jenkins/workspace/test"
WEB_DIR="/usr/share/nginx/"

get_code_tar(){
        cdCODE_DIR && tar zcf /opt/web-DATE-{git_version}.tar.gz ./*
}

scp_code_web(){
        scp /opt/web-DATE-{git_version}.tar.gz 192.168.56.130:WEB_DIR
}

code_tarxf(){
        ssh 192.168.56.130 "cdWEB_DIR &&mkdir web-DATE-{git_version} && tar xf web-DATE-{git_version}.tar.gz -C web-DATE-{git_version}"

}
ln_html(){
        rcode=(ssh 192.168.56.130 "findWEB_DIR -type d  -name "web-*-git_version"")
         ssh 192.168.56.130 "cdWEB_DIR && rm -rf html && ln -s rcode html"
}

main(){

        get_code_tar;
        scp_code_web;
        code_tarxf;
        ln_html;
}
if [ "deploy_env" == "deploy" ];then
        main
elif [ "$deploy_env" == "rollback" ];then
        ln_html
fi

1.7.5 完成

本文链接:https://www.yunweibase.com/archives/726

网友评论comments

发表评论

邮箱地址不会被公开。 必填项已用*标注

暂无评论

Copyright © 运维基地 保留所有权
扫二维码
扫二维码
返回顶部