在一个典型的CI/CD流程中,你通常会有多个服务器或环境,包括本地开发环境、GitLab服务器、构建服务器(通常是GitLab Runner所在的服务器),以及生产服务器。以下是在这些不同环境中执行的详细步骤:
1. 本地开发环境
-
在你的本地开发环境中,首先创建一个Go语言项目,并编写应用程序代码。
-
在项目根目录创建一个
Dockerfile
,用于构建Docker镜像,如前面的示例所示。 -
创建一个GitLab仓库,将你的项目代码上传到该仓库。
-
安装和配置GitLab Runner,确保GitLab Runner可以在你的本地开发环境中运行。在GitLab Runner注册时,为它提供访问Docker的权限。
2. GitLab服务器
-
创建一个GitLab项目,将你的应用程序代码上传到该项目。
-
在GitLab项目中,导航到
Settings
->CI/CD
,设置CI/CD变量,包括:DOCKER_REGISTRY
:私有Docker仓库的地址(例如:registry.example.com
)。DOCKER_IMAGE_NAME
:你的镜像名称(例如:my-golang-app
)。DOCKER_IMAGE_TAG
:镜像标签,通常可以使用GitLab提供的CI/CD变量$CI_COMMIT_REF_NAME
。
3. 构建服务器(GitLab Runner)
-
确保GitLab Runner已经在构建服务器上安装和配置。
-
注册GitLab Runner以便它可以与GitLab服务器通信。在注册时,提供Runner的地址和访问Docker的权限。
-
部署私有Docker Registry或确保可以访问已有的私有Docker Registry。需要在GitLab Runner服务器上配置Docker登录凭证(使用
docker login
命令)。 -
创建一个
.gitlab-ci.yml
文件在GitLab项目的根目录,定义CI/CD流程。示例文件已在前面提供。
4. 生产服务器
-
在生产服务器上部署Docker和Docker Compose(如果适用)。
-
在生产服务器上创建一个脚本或Docker Compose文件,用于从私有Docker Registry中拉取镜像并启动应用程序容器。这个脚本或文件可以是一个简单的Bash脚本、Docker Compose文件或Kubernetes配置文件,具体取决于你的部署架构。
-
在GitLab CI/CD流程的
deploy
阶段,添加命令来远程执行生产服务器上的脚本,或者使用CI/CD工具如Ansible来部署应用程序到生产服务器。 -
为了安全起见,确保生产服务器上已经配置了适当的安全设置、防火墙规则、反向代理等,以保护应用程序的访问。
总结
这些步骤描述了如何设置一个完整的CI/CD流程,从本地开发环境到GitLab服务器、构建服务器和生产服务器。每个环境中的操作取决于具体的需求和架构,你可以根据你的项目的需求进行进一步定制。请确保在每个步骤中使用适当的安全措施来保护你的应用程序和数据。
在GitLab CI/CD流程的deploy
阶段,你可以通过SSH协议远程执行生产服务器上的脚本。这需要在GitLab Runner服务器上设置SSH密钥对,以便能够安全地连接到生产服务器。以下是具体的步骤:
在GitLab Runner服务器上设置SSH密钥对
- 在GitLab Runner服务器上生成SSH密钥对,如果尚未生成:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-
在生成密钥对时,你可以选择是否使用密码保护私钥,这取决于你的安全需求。如果你设置了密码,确保记住了它。
-
打印公钥:
cat ~/.ssh/id_rsa.pub
- 复制公钥的内容。
配置生产服务器
- 在生产服务器上,将公钥添加到
~/.ssh/authorized_keys
文件中。你可以使用以下命令将公钥添加到文件中:
echo "YOUR_PUBLIC_KEY_HERE" >> ~/.ssh/authorized_keys
- 确保
~/.ssh/authorized_keys
的权限设置为600
:
chmod 600 ~/.ssh/authorized_keys
- 在生产服务器上,为你的部署目录创建一个脚本文件,例如
deploy.sh
,包含你的应用程序部署脚本。确保这个脚本可以执行。
更新.gitlab-ci.yml文件
在GitLab项目的.gitlab-ci.yml
文件的deploy
阶段中,添加远程执行生产服务器上的脚本的命令。以下是一个示例:
deploy:
stage: deploy
script:
- ssh user@production-server "cd /path/to/deployment && ./deploy.sh"
only:
- master
user
:生产服务器的SSH用户名。production-server
:生产服务器的主机名或IP地址。/path/to/deployment
:部署目录的路径。./deploy.sh
:远程执行的脚本。
这个示例中,CI/CD流程会使用SSH连接到生产服务器,并在指定的目录下执行deploy.sh
脚本。确保你已经在GitLab Runner服务器上配置了SSH密钥对,以便能够安全地连接到生产服务器。
这样,当你在GitLab项目的master
分支提交代码时,CI/CD流程将触发deploy
阶段,远程执行生产服务器上的脚本,实现自动部署。