在开发应用时最头疼的就是发布问题,如果能在开发完成后,通过一个按钮就能实现自动编译源码并打包上传到阿里云服务器自动部署成功,那对于开发工程师来讲,效率将大大的提升,下面我结合自己的经验,梳理出一份步骤,分享给还在奋斗的你!希望对你有所帮助!

完整的 CI/CD 流程。以下是详细的步骤和潜在问题的处理方法,以确保在从 GitLab 拉取代码、构建 Docker 镜像、推送到阿里云镜像仓库以及在生产环境中部署时,能够顺利完成。

1. 使用 Docker 部署 .NET Core 应用

1.1 创建 .NET Core 应用

创建 .NET Core Web 应用:

dotnet new webapi -n MyApi
cd MyApi
1.2 编写 Dockerfile

在项目根目录下创建 Dockerfile,定义如何构建 Docker 镜像:

# 使用官方 .NET Core SDK 镜像作为构建环境
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build

WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out

# 使用官方 .NET Core 运行时镜像作为运行环境
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS runtime

WORKDIR /app
COPY --from=build /app/out .

EXPOSE 80
ENTRYPOINT ["dotnet", "MyApi.dll"]
1.3 构建 Docker 镜像

在阿里云服务器上构建镜像:

docker build -t myapi:latest .
1.4 登录阿里云镜像仓库

登录阿里云镜像仓库(确保你已经创建了阿里云镜像仓库并获取了凭据):

docker login --username=<your-username> registry.cn-hangzhou.aliyuncs.com
1.5 推送镜像到阿里云

将镜像推送到阿里云镜像仓库:

docker tag myapi:latest registry.cn-hangzhou.aliyuncs.com/<your-repo>/myapi:latest
docker push registry.cn-hangzhou.aliyuncs.com/<your-repo>/myapi:latest
1.6 运行 Docker 容器

使用阿里云服务器上的镜像运行容器:

docker run -d -p 8080:80 --name myapi_container registry.cn-hangzhou.aliyuncs.com/<your-repo>/myapi:latest

2. Jenkins CI/CD 配置

2.1 安装 Jenkins

在阿里云服务器上运行 Jenkins:

docker run -d -p 8080:8080 -p 50000:50000 --name jenkins jenkins/jenkins:lts
2.2 配置 Jenkins
  1. 安装插件

    • 进入 Jenkins,点击“管理 Jenkins” -> “管理插件”。
    • 搜索并安装 Docker Pipeline 插件和 GitLab Plugin
  2. 配置 Docker 主机

    • 在“管理 Jenkins” -> “系统设置”中,找到 Docker 部分,添加 Docker 主机信息。通常主机名为 unix:///var/run/docker.sock,或 tcp://localhost:2375(如果启用了 TCP 端口)。
2.3 创建 Jenkins Pipeline

在 Jenkins 中创建一个新的 Pipeline 项目,使用以下 Jenkinsfile

pipeline {
    agent any
    environment {
        DOCKER_IMAGE = 'registry.cn-hangzhou.aliyuncs.com/<your-repo>/myapi:latest'
        REGISTRY_URL = 'https://registry.cn-hangzhou.aliyuncs.com'
        GITLAB_REPO = 'https://gitlab.com/your-repo/MyApi.git'
    }
    stages {
        stage('Checkout') {
            steps {
                script {
                    // 从 GitLab 拉取最新代码
                    git url: "${GITLAB_REPO}", credentialsId: 'gitlab-credentials'
                }
            }
        }
        stage('Build') {
            steps {
                script {
                    // 使用 Docker 构建镜像
                    docker.build("${DOCKER_IMAGE}")
                }
            }
        }
        stage('Test') {
            steps {
                script {
                    // 在 Docker 容器中运行测试
                    docker.image("${DOCKER_IMAGE}").inside {
                        sh 'dotnet test'
                    }
                }
            }
        }
        stage('Push') {
            steps {
                script {
                    // 登录到阿里云镜像仓库
                    docker.withRegistry('https://registry.cn-hangzhou.aliyuncs.com', 'ali-cloud-credentials') {
                        // 推送镜像到阿里云镜像仓库
                        docker.image("${DOCKER_IMAGE}").push('latest')
                    }
                }
            }
        }
        stage('Deploy') {
            steps {
                script {
                    // 部署到生产环境(示例使用 Docker 运行命令)
                    sh '''
                    docker run -d -p 80:80 --name myapi_container ${DOCKER_IMAGE}
                    '''
                }
            }
        }
    }
}
2.4 配置 Jenkins Credentials
  • GitLab 凭据

    • 转到“管理 Jenkins” -> “管理凭据” -> “全局凭据”。
    • 添加 GitLab 的凭据(选择 Username with passwordSecret text,根据你的 GitLab 设置进行配置)。
  • 阿里云凭据

    • 添加阿里云镜像仓库的凭据(选择 Username with password)。
2.5 配置 GitLab Webhook

在 GitLab 仓库中设置 Webhook,以触发 Jenkins 构建。配置 Webhook 的 URL 为 Jenkins 的触发 URL,例如 http://<your-aliyun-server-ip>:8080/gitlab-webhook/。确保使用 GitLab Webhook 插件来处理触发请求。

3. 常见问题及解决方案

3.1 Jenkins 无法从 GitLab 拉取代码
  • 问题:Jenkins 拉取代码失败,可能是凭据问题或网络问题。
  • 解决方案
    • 确保在 Jenkins 中配置了正确的 GitLab 凭据,并且这些凭据有足够的权限访问 GitLab 仓库。
    • 检查 Jenkins 服务器的网络设置,确保可以访问 GitLab。
3.2 Docker 镜像构建失败
  • 问题:Docker 镜像构建失败,可能是 Dockerfile 配置错误或依赖问题。
  • 解决方案
    • 确认 Dockerfile 配置正确,检查日志输出,修复任何错误或缺失的依赖。
    • 在本地环境中先测试 Dockerfile 是否能够成功构建镜像。
3.3 推送镜像到阿里云失败
  • 问题:推送镜像到阿里云镜像仓库失败,可能是凭据错误或网络问题。
  • 解决方案
    • 确保阿里云镜像仓库凭据正确,并且有权限推送镜像。
    • 检查网络设置和镜像仓库的访问权限。
3.4 部署失败
  • 问题:在生产环境中部署 Docker 容器失败,可能是容器配置错误或端口冲突。
  • 解决方案
    • 检查部署命令和容器配置,确保没有端口冲突。
    • 查看容器日志以获取详细错误信息,并进行调试。

4. 总结

通过这些详细的步骤,你可以在阿里云服务器上配置 Docker 和 Jenkins,实现从 GitLab 获取代码、构建和测试 Docker 镜像、将镜像推送到阿里云镜像仓库,并最终在生产环境中部署 Docker 容器。Jenkins 自动化了构建、测试、推送和部署的过程,同时提供了处理常见问题的解决方案,确保 CI/CD 流程的顺利进行。

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐