阿里云 - 云效构建免费的持续集成部署流程

235 阅读4分钟
CI/CD 是持续集成(Continuous Integration,CI)、持续交付(Continuous Delivery,CD)与持续部署(Continuous Deployment,CD)的简称。
现在比较流行的CI/CD工具有很多,用的比较多的应该就是jenkins,也有很多工具基于jenkins来做上层的功能构建。本文介绍的是阿里 - 云效,但这里我只用了它的代码库、制品库和流水线。本文是主要介绍流水线配置。

Pasted image 20230904170556.png

CI持续集成(Continuous integration)

大师 Martin Fowler 对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件

简单来讲就是在开发完成代码功能提交代码后自动触发的一系列检查操作。

  • 打包编译
  • 单元测试
  • 漏洞扫描
  • 自动化测试
  • ... 持续集成可以帮助开发人员合并代码后即时、自动的检查代码可能出现的问题,省去了人工合并、人工扫描、人工打包等功能,帮助开发人员可以快速开发、修改功能而减少发布后问题的产生率。

CD持续交付(Continuous Deliveru)

完成CI流程后,持续交付功能会将已经验证过的代码发布到代码库中。持续交付的目标是拥有一个可以随时将开发代码部署到生产环境的代码库。 在持续交付中,每个阶段(从代码更改的合并,到生产就绪型构建版本的交付)都涉及测试自动化和代码发布自动化。在流程结束时,运维团队可以快速、轻松地将应用部署到生产环境中 注意,持续交付在自动化测试和集成结束后,具备部署的能力,但不会自动部署,而是手动部署。

CD持续部署(Continuous Deployment)

在持续交付的过程后,就来到了持续部署的过程,将交付的代码或者代码包发布到生产上。至此完成一次从代码提交到服务启动的过程。

一、云效代码库

云效提供免费的代码库空间(免费版<= 5G),这里为了配置它的流水线,我将代码库从github导入到了云效,在本地git配置了两个remote,小修改我会直接提交到github,当涉及到需要更新线上服务版本的时候才会推送修改到云效仓库,触发流水线部署。

导入github项目

二、配置流水线

1、选择模板

因为我使用Docker部署,所以这里选择了这个模板。

Pasted image 20230904173552.png

2、配置代码库触发

这里直接配置代码库触发器为提交代码时触发。

Pasted image 20230904173456.png

3、构建镜像

构建镜像,我是依托于阿里的私有镜像仓库,所以直接配置了我的仓库地址和令牌即可。如果有私服部署的镜像仓库可以配置shell完成打包镜像和上传。 ps:这里构建镜像需要项目中配置Dockerfile,Dockerfile编写不在这里多加赘述,可以去官网查看即可。

4、部署

部署操作这里因为我用Docker所以选择Docker部署。

Pasted image 20230904174135.png

在里面选择我们的服务器,然后配置执行脚本就可以了。下面是我配置的脚本,一个简单的删除、新增容器的逻辑。


service_name='demo'
service_image='镜像仓库地址/demo:latest'
 
 echo '#### 执行检查项 ####'
 service_count=`ps -ef | grep -v grep | grep -c docker`
    if [  $service_count -lt 1 ]; then
        echo '#### docker.service is not running ... ####'
        exit 1
    fi
 echo '## docker.service is running ## '
 container_id=`docker ps -q | grep $service_name | awk '{print $1}'`
    if [[ ! $container_id  ]]; then
        echo "#### $service_name exist , container_id is [$container_id]"
        echo "#### 执行服务停止删除操作。####"
        docker stop $service_name && docker rm -f $service_name
        echo "#### 执行服务停止删除完成。####"
    fi
    
 echo '#### 检查完成 ####'

# 登录私有镜像仓库
 cat /pass.txt | docker login --username 用户名 --password-stdin 仓库地址
 # 获取appet-core lastest镜像
 docker pull $service_image
 
 docker run -it -d --name=$service_name --network host $service_image
 
 docker ps | grep $service_name

 echo '#### 执行完成 #### '

三、结束语

通过以上简单的步骤配置就能获取一个自动化流水线,我配置的是很简单的内种,大家如果有需要还可以配置自动化测试、代码扫描等流程。

上面是个人的实践,如果有误或者想要探讨问题可以在下方留言哦。