coding替代Jenkins--部署随想

为之前有一个项目计划中使用Jenkins,但是后面因为某些原因直接使用coding上的基于Kubernetes的持续部署,直至今天才想起来去了解一下Jenkins。

首先认识一下什么是Jenkins。

可以参考中文官网:https://www.jenkins.io/zh/,说简单些Jenkins提供一个平台,通过十分强大丰富的一个个插件实现持续集成的软件平台。

Jenkins的作用

● 持续、自动的构建/测试软件项目
● 监控一些定时执行的任务

首先思考一下部署的本质?

前端:可以访问到index.html网页;
后端:执行jar/war包。

关于docker和Jenkins的部署参考下面文章:

1、docker 构建git+maven+jdk8的centos7环境,实现轻量级的springboot项目的自动化部署 :https://blog.csdn.net/qq_42937522/article/details/107755941
2、部署SpringBoot的jar包项目让人头疼,不如使用jenkins+docker自动化部署jar包项目:
https://blog.csdn.net/qq_42937522/article/details/106325306
3、Docker部署SpringMVC+Jsp项目:https://blog.csdn.net/zhang19903848257/article/details/121287999

coding平台介绍

官网地址:https://coding.net/
它类似于github、gitee同样提供了代码托管,以及项目协同、测试管理、制品库、持续集成、持续部署等一系列的工具。我们可以看一下官网提供的类比与GitHub、GitLab、Jenkins、Jira的功能优缺点。
作为工具的使用者,就不做过多的随意评论了。非要找几点Coding的缺点的话,
1、GitHub、Gitee仍然是国内外最大的代码托管平台,提供了许多优质的开源项目。
2、虽然一再承诺安全性并且也提供私有部署的入口(需要填写问卷就没有继续往下操作),但是哪有自己搭建一个自己的gitLab香。

自动化实现

这里我们基于上面博客一搭建起docker的项目环境。
而我们需要做的是coding合并代码后自动或者手动连接远程服务器,执行项目中的脚本文件smpe-admin.sh pull

首先在coding项目中创建构建计划,选择发起SSH连接

自定义该计划的流程配置
Jenkinsfile和sh脚本编写不太熟悉,一定存在更加精简优雅的写法有待完善,V1版如下,思路是

  1. 创建一个sh脚本,然后脚本中命令首先赋予权限,然后执行服务器端的mysh.sh脚本
  2. 把test.sh脚本发送到远程服务器执行,然后删除
def remoteConfig = [:]
remoteConfig.name = "my-remote-server"
remoteConfig.host = "${REMOTE_HOST}"
remoteConfig.allowAnyHosts = true

node {
  // 使用当前项目下的凭据管理中的 用户名 + 密码 凭据
  withCredentials([usernamePassword(
    credentialsId: "${REMOTE_CRED}",
    passwordVariable: 'password',
    usernameVariable: 'userName'
  )]) {

    // SSH 登陆用户名
    remoteConfig.user = userName
    // SSH 登陆密码
    remoteConfig.password = password

    stage("通过 SSH 执行命令") {
      // 本地创建一个 test.sh 脚本,用来发送到远端执行
      writeFile(file: 'test.sh', text: 'ls; chmod +x mysh.sh; ./mysh.sh')
      sshCommand(remote: remoteConfig, command: 'for i in {1..5}; do echo -n \"Loop \$i \"; date ; sleep 1; done')
      sshScript(remote: remoteConfig, script: 'test.sh')
      sshPut(remote: remoteConfig, from: 'test.sh', into: '.')
      sshGet(remote: remoteConfig, from: 'test.sh', into: 'test_new.sh', override: true)
      // sshRemove(remote: remoteConfig, path: 'test.sh')
    }

    stage("测试命令") {
      echo '测试成功' 
    }
  }
}


我们 也可以配置相关的触发规则

远程服务端定义mysh.sh脚本

#/bin/bash
echo "开始执行"
docker exec  tiku_api_test bash -c 'cd /project/group_test/tiku-api/ && sh smpe-admin.sh pull master'
echo "执行完成"

注意这儿的命令使用的docker exec 容器名称 -c '脚本命令',去掉了-it,因为-it会建立一个伪终端,docker容器中的输出语句在宿主机上接收。
之后进入到容器内部,查看smpe-admin.sh pull

由于我用的https方式,git在拉取远程仓库代码时需要填写用户名和密码(SSH不存在此问题)。这儿我同样调用脚本去自动输入账号和密码。
这儿采用expect方式实现脚本密码交互,yum install expect

touch gitpull.exp
# 内容如下usr/bin/expect声明不要忘记

#!/usr/bin/expect
set timeout 10

spawn git pull origin develop
expect "Username*"
用户名和密码可以使用coding上环境变量传递过来,也可以直接写死
send "$username\n" 
expect "Password*"
send "$password\n"
expect eof

修改smpe-admin.sh文件中的pull命令调用gitpull.exp脚本expect gitpull.exp
在这里插入图片描述

测试:
在这里插入图片描述
在这里插入图片描述

构建成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值