jenkins实现项目自动部署

    xiaoxiao2021-04-13  33

    目录(?)[-]

    背景整体思路实现方式 自动化部署脚本远程执行配置jenkins任务

    背景整体思路实现方式 1 自动化部署脚本2 远程执行3 配置jenkins任务

    背景

    之前给公司搭建过一套gitlab+gerrit+jenkins的持续集成环境,由于操作起来有点繁琐,自己也没太搞清楚该怎么用,所以一直就只用了gitlab来做代码管理。最近要做一个项目自动部署的功能,使用过jenkins一定知道他的自动化功能。所以就从jenkins创建自动部署任务的方式来入手。

    整体思路

    jenkins可以配置触发器,当有新的提交时,触发执行相应的任务。由于jenkins和项目部署不在同一服务器上,所以我想用ssh到远程服务器后执行对应的部署脚本来做自动部署。

    实现方式

    我是按照倒推的思路来完成整个流程的。

    1、 自动化部署脚本

    项目是用Git管理的,首先脚本要能够实现切换到指定目录下后pull对应的分支。

    #! /bin/bash #切换到项目路径下 cd ~/coffee/myproject git checkout -f git clean -fd git pull 123456 123456

    可以通过接收的参数,来决定切换的项目路径

    #! /bin/bash #切换到指定目录 if [ "$1"x = "project1"x ]; then cd ~/coffee/myproject1 elif [ "$1"x = "project2"x ]; then cd ~/coffee/myproject2 elif [ "$1"x = "project3"x ]; then cd ~/coffee/myproject3 else echo "failed" exit fi git checkout -f git clean -fd git pull 123456789101112131415161718 123456789101112131415161718

    2、 远程执行

    首先在本地配置好在jenkins所在的服务器上可以免登录ssh到要部署的服务器上:利用ssh-keygen生成公钥后,粘贴到目标服务器上~/.ssh/authorized_keys文件中。此时在jenkins服务器上即可远程执行更新脚本/

    ssh root@192.168.1.100 "/root/myscript/pull.sh project1" 1 1

    3、 配置jenkins任务

    (1)填写项目名称  (2)在源码管理的位置,选择git,在Repository URL里填写项目的URL,结果遇到报错

    stdout: stderr: Permission denied (publickey,keyboard-interactive). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 123456 123456

    这种权限错误,一般是因为ssh公钥没有添加到git服务器上。但是这里需要注意的一点是,需要填写jenkins用户下的公钥。  执行su - jenkins后,发现没有任何反应。原因是/etc/passwd中的/bin/bash变成了/bin/false。

    sudo vim /etc/passwd 1 1

    jenkins:x:103:160:Jenkins Continuous Integration Server:/var/lib/jenkins:/bin/false 1 1

    改为

    jenkins:x:103:160:Jenkins Continuous Integration Server:/var/lib/jenkins:/bin/bash 1 1

    这时执行su - jenkins 后可以切换用户,但是命令提示符的用户名显示的是

    -bash-4.1$ 1 1

    解决方法是在jenkins用户下的bash_profile添加命令行提示符环境变量

    vim ~/.bash_profile 1 1

    添加

    export PS1='[\u@\h \W]\$' 1 1

    加载修改完的bash_profile:

    source ~/.bash_profile 1 1

    此时前面的用户名提示恢复正常:

    [jenkins@localhost ~]$ 1 1

    我在开始安装jenkins时,使用以下命令生成过公钥jenkins.pub:

    ssh-keygen -C jenkins@163.com 1 1

    将公钥添加到gitlab后,仍然报权限错误。此时看到gitlab上添加ssh公钥说明,生成公钥需要选择-t rsa,而ssh-keygen默认使用的加密是dsa。  使用命令

    ssh-keygen -t rsa 1 1

    将新生成的公钥添加到gitlab服务器上,

    此时可能需要在jenkins服务器上,切换到jenkins用户后执行一下:  git ls-remote -h [项目的git地址] HEAD  参考jenkins host key verification failed

    之后就不再报权限错误了。  Branch Specifier (blank for ‘any’)填写自己要响应的分支变化。  (3)构建触发器选择  首先需要在jenkins安装插件Gitlab Hook Plugin,安装完之后在构建触发器就能看到:

    Build when a change is pushed to GitLab. GitLab CI Service URL: http://xxx.com/project/myproject1 1 1

    选中该选项。因为要在有push事件发生时,进行自动部署,因此勾选Build on Push Events。  (4)构建里选择增加构建步骤->Execute shell  Command 里写远程执行更新脚本的命令

    ssh root@192.168.1.100 "/root/myscript/pull.sh project1" 1 1

    (5)可选:如果想要一个失败的消息通知,可以在构建后操作里,增加构建后操作步骤->Email Notification,填写自己的邮箱即可  点击保存。  但是此时还没有配置完,我们需要通过gitlab的web hooks的功能,来让jenkins接收到push的消息。  4、 配置web hooks  刚才在构建触发器里有一项,里面提供的地址就是我们要在gitlab的web hooks里填写的地址(下面只是我的一个示例地址)

    Build when a change is pushed to GitLab. GitLab CI Service URL: http://xxx.com/project/myproject1 1 1

    填写完之后,我们的整个自动部署流程就已经可以运行了。自己push一下试试吧。

    参考:  shell执行git命令  shell 脚本执行后 ssh 连入远程服务器  ssh远程执行命令并自动退出  Jenkins+git+webhook自动触发部署和测试任务  在Centos系统中无法切换jenkins用户  ssh-keygen 的 详解  jenkins host key verification failed

    转载请注明原文地址: https://ju.6miu.com/read-668312.html

    最新回复(0)