Linux系统:第十五章:gitlab集成CI Myth丶恋晨 2022-09-16 04:58 194阅读 0赞 集成gitlab的CI首先需要安装好docker和gitlab,大家可以参考我上一章节:[Linux系统:第十四章:安装Docker,下载安装配置gitlab以及jenkins,图文讲解CI流程。][Linux_Docker_gitlab_jenkins_CI] 正文开始: gitlab-runner命令: docker run -d --name gitlab-runner --restart always \ -v /srv/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest gitlabrunner注册gitlab docker run --rm -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \ --non-interactive \ --executor "docker" \ --docker-image alpine:latest \ --url "http://xx.xxx.xxx.x:8012" \ --registration-token "zh5GqHF_bqZx-5iDSqty" \ --description "docker-runner" \ --tag-list "docker,aws" \ --run-untagged="true" \ --locked="false" \ --access-level="not_protected" 需要修改的:registration-token和url 在gitlab中的以下部分复制: Menu->Admin->overview->runner ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAamF2YeWwj-S4kQ_size_16_color_FFFFFF_t_70_g_se_x_16]![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAamF2YeWwj-S4kQ_size_20_color_FFFFFF_t_70_g_se_x_16].gitlab-ci.yml文件配置(可做参考) # 定义一些变量, 下面各阶段会使用 variables: ssh_name: root #远程连接服务器的用户 uat_server_ip: xx.xx.xx.xx #远程连接的服务器ip uat_ssh_password: /usr/local/pem/qt_dev_cert.pem #从密码文件读取文件内容作为密码去远程连接主机 jar_name: community-fragrant-starter.jar #项目打包成jar java_path: /usr/java/jdk1.8.0_131/bin #jdk路径 upload_path: /home/project/community #上传项目的目录 #开始结束打印日志 before_script: - echo '=================start==================' after_script: - echo '=================finish==================' # 定义执行的各个阶段及顺序,本次构建的阶段:build package deploy stages: - build - upload - deploy # 打包 Job,使用 maven 镜像打包项目 job_build: stage: build image: maven:3.5.0-jdk-8 script: - mvn package -Dmaven.test.skip=true cache: key: m2-repo paths: - .m2/repository artifacts: paths: - target/$jar_name # 上传生成的 jar 包到你的应用服务器。 job_upload_prod: stage: upload image: ictu/sshpass script: - ls -l target/ - sshpass -f $uat_ssh_password scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no target/$jar_name $ssh_name@$uat_server_ip:$upload_path/$jar_name only: - master #部署 Job job_deploy_prod: stage: deploy image: ictu/sshpass script: - echo "java start service" - sshpass -f $uat_ssh_password ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $ssh_name@$uat_server_ip "cd $upload_path;chmod 777 $jar_name;sudo systemctl stop fragrant.service; sudo systemctl start fragrant.service;sudo systemctl status fragrant.service;" only: - master # .gitlab-ci.yml文件配置详细说明 # ## 定义一些变量, 下面各阶段会使用 ## variables: ssh_name: root #远程连接服务器的用户 uat_server_ip: xx.xx.xx.xx #远程连接的服务器ip uat_ssh_password: /usr/local/pem/qt_dev_cert.pem #从密码文件读取文件内容作为密码去远程连接主机 jar_name: community-fragrant-starter.jar #项目打包成jar java_path: /usr/java/jdk1.8.0_131/bin #jdk路径 upload_path: /home/project/community #上传项目的目录 ## 开始结束打印日志 ## before_script: - echo '=================start==================' after_script: - echo '=================finish==================' ## 定义执行的各个阶段及顺序,本次构建的阶段:build package deploy ## stages: - build - upload - deploy ## 打包 Job ## 使用 maven 镜像打包项目 > \-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。 打包 Job配置: job_build: stage: build image: maven:3.5.0-jdk-8 script: - mvn package -Dmaven.test.skip=true cache: key: m2-repo paths: - .m2/repository artifacts: paths: - target/$jar_name ## 标题上传生成的 jar 包到你的应用服务器 ## > 这里使用 ictu/sshpass 这个镜像,是为了使用 sshpass 命令 > 配置:UserKnownHostsFile=/dev/null和 StrictHostKeyChecking=no。 > 作用:SSH登陆时会忽略known\_hsots的访问。 > 原因:ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known\_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,避免你受到DNS Hijack之类的攻击。一台主机上有多个Linux系统,会经常切换,那么这些系统使用同一ip,登录过一次后就会把ssh信息记录在本地的~/.ssh/known\_hsots文件中,切换该系统后再用ssh访问这台主机就会出现冲突警告,需要手动删除修改known\_hsots里面的内容。 > only:- master:限制只有master的分支 job_upload_prod: stage: upload image: ictu/sshpass script: - ls -l target/ - sshpass -f $uat_ssh_password scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no target/$jar_name $ssh_name@$uat_server_ip:$upload_path/$jar_name only: - master ## 部署 Job ## > cd $upload\_path;进入上传jar包的目录 > chmod 777 $jar\_name;给jar包授权 > sudo systemctl stop fragrant.service;暂停服务 > sudo systemctl start fragrant.service;开启服务 > sudo systemctl status fragrant.service;查看服务状态 > fragrant.service是一个脚本,需要再/usr/lib/systemd/system目录下面创建一个fragrant.service脚本文件,创建好脚本文件之后还需要设置开机自启动,命令:systemctl enable fragrant.service fragrant.service脚本内容: [Unit] Description=service for description After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=forking ExecStart=/home/project/community/fragrant-start.sh ExecStop=/home/project/community/fragrant-stop.sh PrivateTmp=true [Install] WantedBy=multi-user.target 然后在上传项目的目录下创建二个开启和暂停的脚本 fragrant-start.sh 脚本内容 #!/bin/sh export JAVA_HOME=/usr/local/src/jdk1.8.0_301 export PATH=$JAVA_HOME/bin:$PATH nohup java -jar /app/api/fragrant/community-fragrant-starter.jar > /app/log/fragrant/community-fragrant-starter.log & echo $! > /app/run/fragrant.pid fragrant-stop.sh 脚本内容 #!/bin/sh PID=$(cat /app/run/fragrant.pid) kill -9 $PID 部署 Job配置: job_deploy_prod: stage: deploy image: ictu/sshpass script: - echo "java start service" - sshpass -f $uat_ssh_password ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $ssh_name@$uat_server_ip "cd $upload_path;chmod 777 $jar_name;sudo systemctl stop fragrant.service; sudo systemctl start fragrant.service;sudo systemctl status fragrant.service;" only: - master [Linux_Docker_gitlab_jenkins_CI]: https://liaozhiwei.blog.csdn.net/article/details/120728105 [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAamF2YeWwj-S4kQ_size_16_color_FFFFFF_t_70_g_se_x_16]: https://img-blog.csdnimg.cn/ac4dde505a80472e980c0e5cf45262e1.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAamF2YeWwj-S4kQ==,size_16,color_FFFFFF,t_70,g_se,x_16 [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAamF2YeWwj-S4kQ_size_20_color_FFFFFF_t_70_g_se_x_16]: /images/20220828/3c1ad21f53bc4b4089273e6ac6473245.png
相关 系统集成|第十九章(笔记) 目录 第十九章 风险管理 19.1 风险管理的概述及相关概念 19.2 主要过程 19.2.1 规划风险管理 喜欢ヅ旅行/ 2023年10月16日 14:47/ 0 赞/ 85 阅读
相关 系统集成|第十八章(笔记) 目录 第十八章 安全管理 18.1 信息安全管理 18.2 信息系统安全 18.3 物理安全管理 18.4 人 红太狼/ 2023年10月16日 14:43/ 0 赞/ 86 阅读
相关 系统集成|第十五章(笔记) 目录 第十五章 采购管理 14.1 概述及相关概念 14.2 主要过程 14.2.1 编制采购计划 逃离我推掉我的手/ 2023年10月16日 14:18/ 0 赞/ 63 阅读
相关 系统集成|第十四章(笔记) 目录 第十四章 合同管理 14.1 概述及相关概念 14.2 项目合同 14.3 《合同法》 14.4 《仲裁 ﹏ヽ暗。殇╰゛Y/ 2023年10月16日 14:15/ 0 赞/ 58 阅读
相关 系统集成|第十二章(笔记) 目录 第十二章 沟通管理 12.1 沟通的基本概念 12.2 主要过程 12.2.1 规划沟通管理 ゞ 浴缸里的玫瑰/ 2023年10月16日 13:31/ 0 赞/ 87 阅读
相关 系统集成|第十一章(笔记) 目录 第十一章 项目人力资源管理 11.1 项目人力资源管理的定义及有关概念 11.2 主要过程 11.2.1 编制项 ゝ一纸荒年。/ 2023年10月16日 13:26/ 0 赞/ 88 阅读
相关 系统集成|第十章(笔记) 目录 第十章 质量管理 10.1 项目质量管理概论 10.2 主要过程 10.2.1 规划质量管理 左手的ㄟ右手/ 2023年10月16日 11:27/ 0 赞/ 81 阅读
相关 系统集成|第五章(笔记) 目录 第五章 立项管理 5.1 项目立项 5.2 主要过程 5.2.1 项目建议 5.2.2 项 曾经终败给现在/ 2023年10月14日 04:18/ 0 赞/ 100 阅读
相关 Linux系统:第十五章:gitlab集成CI 集成gitlab的CI首先需要安装好docker和gitlab,大家可以参考我上一章节:[Linux系统:第十四章:安装Docker,下载安装配置gitlab以及jenkins Myth丶恋晨/ 2022年09月16日 04:58/ 0 赞/ 195 阅读
相关 GitLab CI持续集成-GitLab Runner GitLab CI是开源的持续集成服务,GitLab Runner是一个开源项目,用于运作任务,并把结果发送回GitLab,它与GitLab CI一起使用。 持续集成 旧城等待,/ 2022年01月19日 05:39/ 0 赞/ 435 阅读
还没有评论,来说两句吧...