序言

之前布署项目的时侯都是自动的打jar包,之后将jar包上传到服务器运行,十分麻烦。上个月去其他公司待了一段时间,发觉了手动化布署如此一个好东西,只要本地一递交代码,还会手动打包发布到指定的服务器上,免去了自动布署的麻烦。之前手身上只有一台阿里云linux下socket编程,也就没搞了,刚好这几天华为云有活动,近乎白嫖了两台服务器,所以恰好可以试试手动化布署。

打算工作流程介绍

手动化布署的工具有好多,我一开始是准备折腾一下Jenkins的,不过没搞上去。之后就选择使用GitLab,由于GitLab就自带了CICD的功能。

linux copy文件到指定目录_linux如何copy文件_mac安装dmg文件指定安装目录

布署项目无非就是打成jar包,将jar包放在Web服务器中,再将jar包运行上去linux操作系统简介,步骤都是固定的,只不过之前每次都是我们自动操作而已。而手动化布署的原理虽然就是我们先用脚本将布署的步骤写好,之后在特定的时侯手动执行这种脚本。这么怎样在递交代码的时侯执行指定的脚本了,这就要利用CICD工具和github-runner了。

我们将脚本写好,若干步骤加在一起就称作为一个job,而gitlab-runner就是执行job的东西。在job中就指定好了要用那个gitlab-runner来运行,这样GitLab服务器在我们递交代码时将代码再发送到指定的gitlab-runner中,再由其执行打包、运行的命令就OK了。

安装GitLab

怎么安装GitLab可以参考这篇教程:

/bestpractic…

教程中是基于CentOS7.2的,我用的CentOS7.9也是可以的。不过自己折腾着玩的男子伴可以装社区版linux copy文件到指定目录,我一开始装的企业版,用上去卡卡的,常常加载不下来,换了社区版就好了。安装时只要把教程中的ee换成ce就是社区版了。

而CICD是GitLab外置的功能,所以就不用额外安装了。

在Web服务器上安装和注册gitlab-runner

gitlab-runner是拿来运行手动化任务的。安装很简单,就下边两个命令

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
yum install gitlab-runner
复制代码

安装完成后就须要将gitlab-runner的信息注册到GitLab中,不然GitLab怎么晓得gitlab-runner的地址呢。

在此之前,要先用管理员帐号登入到GitLab中,之后在设置中找到Runner选项,点击页面中的注册一个实例Runner,还会出现Token,把这个Token复制出来。

mac安装dmg文件指定安装目录_linux如何copy文件_linux copy文件到指定目录

之后回到Web服务器中,运行注册命令

gitlab-runner register
复制代码

之后页面中还会出现一些须要填写的信息:

这样就注册好了,回到GitLab的页面中,就可以看见这个gitlab-runner早已注册成功了。

linux如何copy文件_mac安装dmg文件指定安装目录_linux copy文件到指定目录

Maven和JDK

因为现今编译和运行都是在Web服务器上,所以自然要在Web服务器中安装Maven和JDK,至于这两货如何安装我就不多说了,搞Java的这个应当是基本操作吧。

不过这儿要注意一点,就是Maven和JDK的环境变量除了要在/etc/profile中配置一份,还要在/root/.bash_profile中也配置一份。不然脚本运行的时侯可能会报**“commandnotfound:mvn”**等错误。

配置免密登陆

后面说过。递交代码时,CICD将代码发送到gitlab-runner中。而Maven和JDK都是安装在Web服务器中的,所以我们须要在gitlab-runner中去操作Web服务器。其实gitlab-runner是安装在Web服务器中的,并且它俩的关系可以理解成是宿主机和虚拟机,gitlab-runner通过ssh联接到Web服务器中进行操作,为了便捷,须要配置免密登陆。

# 切到gitlab-runner账号
su - gitlab-runner
# 创建秘钥对
ssh-keygen
# 复制秘钥对到Web服务器中
ssh-copy-id root@182.XX.XX.XX
复制代码

之后试一下在gitlab-runner用户下能够登入到Web服务器中,可以登陆就说明没问题,假若不行再回头瞧瞧哪步出错了。

mac安装dmg文件指定安装目录_linux copy文件到指定目录_linux如何copy文件

之后还须要将私钥存入到GitLab服务器中,默认的储存路径是:/home/gitlab-runner/.ssh/id_rsa.pub

打开该文件,并复制其内容

mac安装dmg文件指定安装目录_linux如何copy文件_linux copy文件到指定目录

之后将其配置到GitLab中:

到此,所有的打算工作就做好啦!

编撰手动化脚本

之后随意在GitLab中创建一个项目,在项目的根目录下添加gitlab-ci.yml文件,之后在上面编撰脚本。

linux如何copy文件_linux copy文件到指定目录_mac安装dmg文件指定安装目录

# 变量
variables:
  # 项目存放目录,要先创建
  project_path: "/root/CICD_Project"
  # 项目部署的服务器ip
  deploy_ip: "182.XX.XX.XX"
# 阶段
stages:
  # develop分支构建阶段
  - my_develop
  # main分支构建阶段
  - my_main
before_script:
  - echo "======== before script ========"
after_script:
  - echo "======== after script ========"
  # 删除.git目录,否则下次构建时可能会报错

linux如何copy文件_mac安装dmg文件指定安装目录_linux copy文件到指定目录

- rm -rf .git # job my_develop_build: only: refs: # 仅限develop分支改动时触发该job - develop # runner的标签,指定用哪个runner去运行job tags: - aliyun-runner-1 # 该任务是哪个阶段 stage: my_develop # 脚本 script: # 删除旧项目文件 - ssh -o StrictHostKeychecking=no root@${deploy_ip} "cd ${project_path} && rm -rf ./*" # 把提交的最新代码复制到指定的项目目录下 - scp -r -o StrictHostKeychecking=no ./* root@${deploy_ip}:${project_path} # 编译项目 - ssh -o StrictHostKeychecking=no root@${deploy_ip} "cd ${project_path} && source /root/.bash_profile && mvn package" # 运行项目 - ssh -o StrictHostKeychecking=no root@${deploy_ip} "cd ${project_path} && chmod +x run.sh && ./run.sh"

linux copy文件到指定目录_linux如何copy文件_mac安装dmg文件指定安装目录

my_main_build: only: refs: - main tags: - huawei1month stage: my_main script: - echo "main-------------------------------------" 复制代码

我这儿定义了两个Job,两个Job分别对应两个阶段,之后分别在不同的分支递交时执行linux copy文件到指定目录,其实你也可以按照你的需求配置一次执行多个阶段等。

之后script里就是具体要执行的脚本了。每位命令后面的“ssh-oStrictHostKeychecking=noroot@${deploy_ip}”是固定写法,用于免密登陆到Web服务器中,前面顿号内的就是具体的命令了,和我们在终端里写的是一样的。

做的事情很简单,无非就是打包运行而已,运行的脚本我又单独讲到run.sh文件中了。

# 切换到项目目录下
cd /root/CICD_Project/target
# 杀死之前的项目进程。这里的cut -c9-14是截取进程id,不一定都是-c9-14
# 可以先运行ps -ef|grep java|grep CICD_Project-0.0.1-SNAPSHOT.jar看一下进程id是第几位到第几位
ps -ef|grep java|grep CICD_Project-0.0.1-SNAPSHOT.jar|cut -c9-14|xargs kill -9
# 停5秒
sleep 5s
# 使环境变量生效
source /root/.bash_profile

linux copy文件到指定目录_linux如何copy文件_mac安装dmg文件指定安装目录

# 运行项目 nohup java -jar CICD_Project-0.0.1-SNAPSHOT.jar >/root/cicd.log 2>&1 & 复制代码

这儿值得注意的就是2>&1。它的作用就是不在控制台输出日志,一定要加上,不然待会儿运行job时才会始终输出在输出日志而造成job仍然处于运行中而不结束。

之后递交代码后才会手动进行编译并发布到Web服务器中了,因为这台服务器是第一次运行,所以下载所需Maven依赖的时间长了点。

linux如何copy文件_linux copy文件到指定目录_mac安装dmg文件指定安装目录

我这儿写了一个测试插口:

@RestController
@RequestMapping("/1")
public class DemoController {
    @GetMapping("/1")
    public String test() {
        String a = "欢迎关注我的微信公众号:Robod";
        System.out.println(a);
        return a;
    }
}
复制代码

访问一下,成功显示了,说明代码布署的没有问题:

再更改一下代码,重新递交一下,更改的代码很快就编译好了并发布到了Web服务器中了。

linux copy文件到指定目录_linux如何copy文件_mac安装dmg文件指定安装目录

如何样,这样是不是很便捷呢。省下的时间又可以捉鱼了。

linux copy文件到指定目录_mac安装dmg文件指定安装目录_linux如何copy文件

其实,GitLabCICD的用法远不止这种。我只是根据我的使用方法简单介绍了一下,愈发详尽的用法可以去查阅官方文档:/jh/ci/

本文原创地址:https://www.linuxprobe.com/hwyybsdylssm.html编辑:刘遄,审核员:暂无