一步一个脚印—我是如何通过自动化流程减少70%的开发的工作量并提高我的工作效率

一步一个脚印—我是如何通过自动化流程减少70%的开发的工作量并提高我的工作效率

图片[1]-一步一个脚印—我是如何通过自动化流程减少70%的开发的工作量并提高我的工作效率-音域动漫

前言:

时间已经到了5月中旬了,这这一阵的假期相对来说比较频繁,刚过了劳动节马上就要迎来了端午节。其实总的来说五一假期是个枯燥且无味的,由于疫情原因小区封闭,每天顶多下楼去遛一遛再或者去拿快递。最近也不知道为啥,身体很疲惫乏力总是想睡觉,每天上班也只能靠喝茶来解决困意。现在执行力下降的厉害,由于我们公司的代码仓库是ftp没有版本管理控制。这么一来,只保存最后可用的且半年没有出现问题的版本。而且一直都是我自己开发自己测试。这里有的步骤是可以省略掉,也可以趁现在规范一下。

先决条件:

一、我所出于的环境属于私有云环境,可以灵活的添加和扩展虚拟服务器,所以我在这里使用的是一个仅进行了基础安装的CentOS 8-Stream服务器

二、我已经提前分配好了IP地址,主机名(或FQDN),磁盘分区等。并且安装采用基础设施安装。

三、由于习惯问题,我在本篇文章对脚本进行讲解所使用的注释是 // 如果你不删除直接复制使用的话肯定会报错

内容和详解:

# dnf install vim wget lrzsz curl nano openssh-server   //安装环境依赖包

# cat << EOF >> /etc/yum.repos.d/gitlab.repo
[gitlab-ce]
name=GitLab 
baseurl='https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/'
gpgcheck=0
enabled=1
EOF

# yum makecache && yum install -y gitlab-ce   //构建本地缓存并安装GitLab

# vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.172.131'

# gitlab-ctl reconfigure	//首次安装运行,生成GitLab配置
======
Password stored to /etc/gitlab/initial_root_password. This file will be cleaned up in first reconfigure run after 24 hours.
最后跑完了后要注意这一条,这是告诉你初始密码的位置,并且这个密码24小时之后会过期
======
# cat /etc/gitlab/initial_root_password    //查看一下登录密码,用户名是root
Password: xcXBstJVscOdDQDV76L6QNpGpaOXFjLYh7Rt+XUmB/o=

在浏览器里输入服务器的IP地址,输入账号和密码后,首先要进行修改密码

依次 右上角用户头像-Edit profile-Password(左侧菜单) 第一行为当前密码(旧密码),然后输入两次新密码后点击 Save password 保存密码 
***密码长度必须大于等于8位***

使用新密码再次登录,进入到了用户界面

可以依次点击 右上角用户头像-Preferences 找到 Localization Language ,选择中文简体,来进行汉化

此时由于我是自己个人使用,就不进行过多的配置,直接进行右上角 新建项目-创建空白项目 输入 项目名称 后,直接点击新建项目

这时候进入到了仓库页面,在上方提示我要添加SSH密钥,点击 添加SSH密钥 ,在代码服务器上
# ssh-keygen -t rsa   //全部回车

# cat ~/.ssh/id_rsa.pub

将输出的内容全部复制进去,点击添加密钥完成添加

这时候此时我的代码库就有了,那么我的目的是在我写完后自动进行测试,然后将代码自动上传到指定服务器上,那么我需要创建一个CI/CD流程

进入仓库界面,左侧 设置-CI/CD-Runner,展开后,出现了 指定Runner的信息,展开 显示Runner安装说明 ,根据说明和环境情况选择,其实就是一个复制粘贴的过程
# gitlab-runner register --url http://gitlab.example.com/ --registration-token GR1348941zeLkey_Q7hbFTwyzr8Kq
//这里只说一下最关键的步骤--registration-token后面跟的是仓库密钥,也是 显示Runner安装说明 按钮上方的那一串

Runtime platform                                    arch=amd64 os=linux pid=6618 revision=febb2a09 version=15.0.0
Running in system-mode.                            
                                                   
Enter the GitLab instance URL (for example, https://gitlab.com/):
[http://gitlab.example.com/]: http://192.168.172.131/		//gitlab的地址
Enter the registration token:
[GR1348941zeLkey_Q7hbFTwyzr8Kq]: 		//你的gitlab仓库的密钥,由于已经在上方指定了,则可以直接回车跳过
Enter a description for the runner:		//runner描述,随便填
[gitlab]: 
Enter tags for the runner (comma-separated):	//runner标签
abc
Enter optional maintenance note for the runner:			//输入维护说明
abc
Registering runner... succeeded                     runner=GR1348941zeLkey_Q
Enter an executor: shell, ssh, docker-ssh+machine, custom, docker, docker-ssh, parallels, virtualbox, docker+machine, kubernetes:
docker			//使用docker环境进行测试
Enter the default Docker image (for example, ruby:2.7):
gcc				//输入使用哪种docker,我是C开发,则输入gcc环境容器名
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 

到这一步,就已经注册完成了。返回仓库CI/CD配置位置,下方已经可以看到了Runner服务器。那么我clone下仓库,然后创建我的代码

# git clone [email protected]:gitlab-instance-6015a18d/111.git		//仓库克隆-使用SSH克隆
# cd 111		//进入我的仓库目录
# git config --global user.name bcYwpK3		//定义好我的信息,名字
# git config user.email [email protected]	//定义好我的信息,邮箱
# cat hello.c		//写了个简单的不能在简单的C程序,输出hello world!

#include <stdio.h>
#include <stdlib.h>
int main()
{
        printf("hello world!");
}

# git add hello.c
# git commit -m "add hello.c" -a
[main 7b2a524] add hello.c
 1 file changed, 6 insertions(+)
 create mode 100644 hello.c
# git push origin main
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 338 bytes | 338.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To 192.168.172.131:gitlab-instance-6015a18d/111.git
   43a354c..7b2a524  main -> main

到这里的时候,在仓库里面就能看到我刚刚上传的C代码。那么按照正常流程,我需要clone下来,然后进行测试,如果能编译成功则进行交付到客户服务器上。那么现在来说,我要将这个行为自动化,来省略我的工作。

# cat .gitlab-ci.yml 
---
stages:			//定义一个自动化步骤
  - build			//编译
  - deploy		//部署
job_install:		//第一个阶段名字
  stage: build		//第一个阶段指定的步骤
  tags:		//仓库指定的runner标签
    - abc		
  script:			//测试需要执行的命令
    - gcc hello.c		//编译
    - chmod +x a.out		//赋权限
    - ./a.out	//测试运行
job_deploy:		//第二个阶段名字
  stage: build		//第二阶段对应的步骤
  tags:
    - abc	//仓库指定的runner标签
  script:		//部署需要执行的命令
    - scp -o StrictHostKeyChecking=no hello.c [email protected]:/opt/hello.c		//自动上传到代码服务器

那么此时此刻,我创建了个自动化流程,由于我是在docker内测试,每次测试和部署都会自动拉取新的docker。那么我最后的步骤使用了SCP,测试期间没法输入密码,则需要进行免密登录,那么既然是docker的环境下,可以将本地密钥映射进去。

# ps -ef|grep gitlab-runner    //检查当前gitlab-runner的配置文件
root         991       1  0 19:15 ?        00:00:03 /usr/local/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --user gitlab-runner

# vim /etc/gitlab-runner/config.toml
...		//省略前面的配置不要修改,直接找到下面的配置
  [runners.docker]
    tls_verify = false
    image = "gcc"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache","/var/run/docker.sock:/var/run/docker.sock","/home/gitlab-runner/.ssh:/root/.ssh"]	//添加ssh密钥映射
# git commit -m "change ci/cd" -a && git push origin main		//提交修改并发送到代码仓库
[main 7c79fdb] change ci/cd
 1 file changed, 1 insertion(+), 1 deletion(-)
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 352 bytes | 352.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
To 192.168.172.131:gitlab-instance-6015a18d/111.git
   9c72fdc..7c79fdb  main -> main

此时此刻,GitLab已经提交仓库,并开始了自动化测试,进入到自己的仓库内,可以看到上方提示了自动化进度,去代码服务器上,已经看到了上传成功

其中步骤一:已通过 作业 job_install 已触发 9 minutes ago 来自 Administrator
Running with gitlab-runner 15.0.0 (febb2a09)
  on gitlab -mTbmKQh
Preparing the "docker" executor
Using Docker executor with image gcc ...
Pulling docker image gcc ...
Using docker image sha256:709e60f7d3e3c4c83db820a7edc55c7fc50b52d18870b62165aef3bd38d97f64 for gcc with digest [email protected]:084eaedf8e3c51f3db939ad7ed2b1455ff9ce4705845a014fb9fe5577b35c901 ...
Preparing environment
Running on runner--mtbmkqh-project-2-concurrent-0 via gitlab...
Getting source from Git repository
Fetching changes with git depth set to 20...
Reinitialized existing Git repository in /builds/gitlab-instance-6015a18d/111/.git/
Checking out 7c79fdb1 as main...
Skipping Git submodules setup
Executing "step_script" stage of the job script
Using docker image sha256:709e60f7d3e3c4c83db820a7edc55c7fc50b52d18870b62165aef3bd38d97f64 for gcc with digest [email protected]:084eaedf8e3c51f3db939ad7ed2b1455ff9ce4705845a014fb9fe5577b35c901 ...
$ gcc hello.c
$ chmod +x a.out
$ ./a.out
hello world!
Job succeeded

其中步骤二:已通过 作业 job_deploy 已触发 10 minutes ago 来自 Administrator
Running with gitlab-runner 15.0.0 (febb2a09)
  on gitlab -mTbmKQh
Preparing the "docker" executor
Using Docker executor with image gcc ...
Pulling docker image gcc ...
Using docker image sha256:709e60f7d3e3c4c83db820a7edc55c7fc50b52d18870b62165aef3bd38d97f64 for gcc with digest [email protected]:084eaedf8e3c51f3db939ad7ed2b1455ff9ce4705845a014fb9fe5577b35c901 ...
Preparing environment
Running on runner--mtbmkqh-project-2-concurrent-0 via gitlab...
Getting source from Git repository
Fetching changes with git depth set to 20...
Reinitialized existing Git repository in /builds/gitlab-instance-6015a18d/111/.git/
Checking out 7c79fdb1 as main...
Removing a.out
Skipping Git submodules setup
Executing "step_script" stage of the job script
Using docker image sha256:709e60f7d3e3c4c83db820a7edc55c7fc50b52d18870b62165aef3bd38d97f64 for gcc with digest [email protected]:084eaedf8e3c51f3db939ad7ed2b1455ff9ce4705845a014fb9fe5577b35c901 ...
$ scp -o StrictHostKeyChecking=no hello.c [email protected]:/opt/hello.c
Job succeeded
© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容