Jenkins+GitLab自动化部署

文章目录

      • 一、安装Jenkins
      • 二、Jenkins配置证书凭据
        • 1.创建账密凭据(GitLab私有项目)
        • 2.创建SSH凭据(GitLab公开项目)
      • 三、配置Jenkins源码
      • 四、构建
        • 1.Maven构建
        • 2.脚本构建
          • 1.与Web服务器进行免密登录
            • 1.Jenkins部署在CentOS中
            • 2.Jenkins部署在Docker中
          • 2.Jenkins服务器上编写同步脚本
      • 五、配置构建触发器
        • 1.Web hook方式
          • 1.Jenkins配置触发器
          • 2.GitLab配置触发器认证
        • 2.轮询方式
      • 六、GitLab配置Jenkins返回状态
        • 1.GitLab中生成Access Token
        • 2.Jenkins配置GitLab生成的Token
      • 七、构建后操作

一、安装Jenkins

由于内网环境安装Git插件,缺少很多依赖,所以把外网环境下Jenkins安装好插件的plugins复制到内网。

  • 上传插件包

    scp /Users/adam/Downloads/soft/docker_soft/soft/plugins.zip [email protected]:/root
    
  • 创建用户(本文用root)

    sudo groupadd jenkins
    # 创建jenkins用户,创建用户主目录,指定用户默认shell
    sudo useradd -g jenkins -d /home/jenkins -m -s /bin/bash jenkins 
    # 给jenkins用户使用sudo的权限
    sudo echo "jenkins ALL=(ALL:ALL) ALL" >> /etc/sudoers 
    # 给jenkins用户指定密码
    sudo passwd jenkins 
    
  • 安装配置

    # 本地到处镜像
    docker save jenkins > /Users/adam/Downloads/soft/docker_soft/soft/jenkins.tar.gz
    # 上传Jenkins镜像
    scp /Users/adam/Downloads/soft/docker_soft/soft/jenkins.tar.gz [email protected]:/root
    # 登录服务器
    ssh [email protected]
    # 服务器导入镜像
    docker load < /root/jenkins.tar.gz
    # 使用root用户启动镜像
    docker run -d -p 8080:8080 --name jenkins --restart always --privileged=true  -v /root/jenkins/config:/var/jenkins_home -u root jenkins/jenkins
    
  • 替换插件包

    # 插件:Gitlab Plugin 
    scp /Users/adam/Downloads/soft/docker_soft/Jenkins/plugins.zip [email protected]:jenkins/config
    unzip plugins.zip
    # 必须重启容器
    
  • 日志

    docker logs -f jenkins
    
  • 访问

    http://192.168.x.x:8080
    
  • 配置

    • 新建一个Freestyle项目

      Jenkins+GitLab自动化部署_第1张图片

    • 丢弃旧的构建,保持7天

      Jenkins+GitLab自动化部署_第2张图片

    • 选择Shell构建

      # 查看当前执行shell的用户
      whoami
      

      Jenkins+GitLab自动化部署_第3张图片

    • 立即构建(蓝色:正常;红色:异常)

      Jenkins+GitLab自动化部署_第4张图片

    • 点击构建结果,查看控制台

      Jenkins+GitLab自动化部署_第5张图片

二、Jenkins配置证书凭据

GitLab私有项目不能使用SSH凭据,只能使用账密凭据

Jenkins+GitLab自动化部署_第6张图片

Jenkins+GitLab自动化部署_第7张图片

1.创建账密凭据(GitLab私有项目)

Jenkins+GitLab自动化部署_第8张图片

2.创建SSH凭据(GitLab公开项目)
  • 生成公私钥对

    # 生成密钥对
    ssh-keygen -t rsa -f ~/.ssh/jenkins_rsa
    # 私钥 - 添加到Jenkins
    cat ~/.ssh/jenkins_rsa
    # 公钥 - 添加到GitLab
    cat ~/.ssh/jenkins_rsa.pub
    
  • Jenkins添加SSH私钥

    Jenkins+GitLab自动化部署_第9张图片

  • GitLab添加SSH公钥

    Jenkins+GitLab自动化部署_第10张图片

    Jenkins+GitLab自动化部署_第11张图片

三、配置Jenkins源码

  • 选中工程 - 配置

    Jenkins+GitLab自动化部署_第12张图片

  • 源码管理

    Jenkins+GitLab自动化部署_第13张图片

  • 立即构建

    Jenkins+GitLab自动化部署_第14张图片

  • 查看构建地址

    cd /var/jenkins_home/workspace/first-test
    

四、构建

1.Maven构建

//TODO,外网很方便

2.脚本构建

1.由于内网环境,使用pom.xml构建需要maven插件,遂使用脚本构建。

2.在Jenkins服务器上编写同步脚本,将构建结果复制到Web服务器。

1.与Web服务器进行免密登录
1.Jenkins部署在CentOS中
# ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,拥有远程机器的home, ~./ssh , 和 ~/.ssh/authorized_keys的权利
# 第一次需要密码登录
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
  • 异常:

    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

  • 解决:

    # 删除之前的认证再执行
    vi ~/.ssh/known_hosts
    
2.Jenkins部署在Docker中

如果Jenkins部署在docker中,则需要在docker容器内配置免密登录

# 进入容器
docker exec -it 0 /bin/bash
# 如果没有,则生成公私钥对
cd /root/.ssh
# 生成密钥对
ssh-keygen -t rsa
# 私钥 - 添加到Jenkins
cat ~/.ssh/id_rsa
# 公钥 - 添加到GitLab
cat ~/.ssh/id_rsa.pub
# 配置免密登录
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
2.Jenkins服务器上编写同步脚本

vim deploy.sh

#!/bin/bash
# 打印执行过程
set -ex
echo "当前用户:" && whoami
# Jenkins环境
jenkins_pro="cbei_isp"
jenkins_workspace="/var/jenkins_home"

# Web服务器宿主机
web_user="adam"
web_ip="192.168.x.x"

# 宿主机目录,只有宿主机/home/adam权限
# 将docker中/opt/apache-tomcat-8.0.52/webapps挂载到宿主机的/home/adam/tomcat/webapps/
tomcat_webapps="/home/adam/tomcat/webapps"
tomcat_logs="/home/adam/tomcat/logs"

echo "删除旧WAR和日志开始"
ssh $web_user@$web_ip "rm -rf $tomcat_webapps/*.war"
ssh $web_user@$web_ip "rm -rf $tomcat_logs/*"
echo "删除旧WAR和日志结束"
sleep 3

echo "复制WAR到Web服务器,并重命名"
scp $jenkins_workspace/workspace/$jenkins_pro/target/demo-0.0.1-SNAPSHOT.war $web_user@$web_ip:$tomcat_webapps/demo.war

echo "结束"
  • 授权

    chmod 777 deploy.sh
    # ./deploy.sh
    
  • 调用脚本进行构建

    Jenkins+GitLab自动化部署_第15张图片

  • 执行脚本当前位置可以在shell中输入pwd查看日志,默认在 j e n k i n s h o m e / w o r k s p a c e / jenkins_home/workspace/ jenkinshome/workspace/pro

    Jenkins+GitLab自动化部署_第16张图片

五、配置构建触发器

1.Web hook方式
1.Jenkins配置触发器

推荐使用Gitlab插件方式。(内网环境可以直接将外网环境下plugins包复制替换,并重启Jks。)

Jenkins+GitLab自动化部署_第17张图片

安装完插件以后才会有该选项。

Jenkins+GitLab自动化部署_第18张图片

允许分支触发该job。

Jenkins+GitLab自动化部署_第19张图片

2.GitLab配置触发器认证

Jenkins+GitLab自动化部署_第20张图片

将Jenkins配置的请求地址和Token填写到GitLab。

Jenkins+GitLab自动化部署_第21张图片

添加成功

Jenkins+GitLab自动化部署_第22张图片

由于安全问题,GitLab默认不允许请求本地网络,需要管理员权限设置为允许。

Jenkins+GitLab自动化部署_第23张图片

管理员账户才有Admin Area

Jenkins+GitLab自动化部署_第24张图片

设置允许本地网络进行web hooks和services。

Jenkins+GitLab自动化部署_第25张图片

2.轮询方式

公司网络处于安全问题,Jenkins可以访问GitLab,但是GitLab无法访问Jenkins,所以采用轮询模式触发。设定轮询时间,定时检查GitLab是否有更新,更新则触发构建。

Jenkins+GitLab自动化部署_第26张图片

六、GitLab配置Jenkins返回状态

1.GitLab中生成Access Token

Jenkins+GitLab自动化部署_第27张图片

2.Jenkins配置GitLab生成的Token

Jenkins+GitLab自动化部署_第28张图片

配置全局GitLab API token。

Jenkins+GitLab自动化部署_第29张图片

将GitLab中生成的Access Token填入Jenkins中。

Jenkins+GitLab自动化部署_第30张图片

七、构建后操作

Jenkins+GitLab自动化部署_第31张图片

你可能感兴趣的:(DevOps,gitlab,docker,jenkins)