【linux】gitlab + jenkins 实现持续集成

本文详细介绍了如何在Ubuntu服务器上配置jenkins和gitlab,实现持续集成。通过jenkins的GitLab插件和Publish Over SSH插件,结合gitlab的webhook,当gitlab中有代码变更时,自动触发jenkins进行构建和部署。

引言

项目开发过程中,会在服务器上不断地更新项目开发版本。因项目开发技术栈的不同,版本更新有时会是几行简单的命令,有时会是复杂耗时的部署步骤。我们可以用 jenkins(持续集成工具)来完成这些重复性的操作。本文以 jenkins 搭配 gitlab 的方式来记录一下使用过程。后续的持续集成流程如下:

在阿里云上使用 Docker 部署 GitLabJenkins实现持续集成CI)和持续交付(CD)是一种常见的 DevOps 实践,能够显著提升软件开发和部署的效率。以下是详细的部署方案和实现思路。 ### 部署架构概述 在阿里云 ECS 实例上部署 GitLabJenkins 时,通常采用以下架构: - **GitLab**:作为代码仓库和 CI/CD 工具,支持 Webhook 触发机制。 - **Jenkins**:作为持续集成服务器,负责监听 GitLab 的推送事件并执行构建、测试和部署任务。 - **Docker**:用于容器化 GitLabJenkins,便于部署和管理。 - **阿里云镜像仓库(ACR)**:用于存储和管理构建好的 Docker 镜像。 - **目标服务器**:用于部署应用容器。 ### 部署步骤 #### 1. 创建阿里云 ECS 实例 选择合适的 ECS 实例类型,并确保开放以下端口: - **80/443**:用于访问 GitLab Web 界面 - **8080**:用于访问 Jenkins Web 界面 - **22**:用于 SSH 连接 - **50000**:Jenkins Agent 通信端口 #### 2. 安装 Docker 和 Docker Compose ```bash # 安装 Docker sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io # 启动并启用 Docker sudo systemctl start docker sudo systemctl enable docker # 安装 Docker Compose sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ``` #### 3. 部署 GitLab 使用 Docker Compose 部署 GitLab: ```yaml version: '3' services: gitlab: image: gitlab/gitlab-ce:latest container_name: gitlab restart: always hostname: 'gitlab.example.com' environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://<your-ecs-ip>:80' ports: - "80:80" - "443:443" - "22:22" volumes: - ./gitlab/config:/etc/gitlab - ./gitlab/logs:/var/log/gitlab - ./gitlab/data:/var/opt/gitlab ``` 运行命令启动 GitLab: ```bash docker-compose up -d ``` 访问 `http://<your-ecs-ip>` 设置管理员密码并登录。 #### 4. 部署 Jenkins 使用 Docker 部署 Jenkins: ```bash docker run -d -p 8080:8080 -p 50000:50000 \ -v jenkins_home:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -e JAVA_OPTS="-Dhudson.footerURL=http://<your-ecs-ip>:8080" \ --name jenkins \ jenkins/jenkins:lts ``` 访问 `http://<your-ecs-ip>:8080` 完成 Jenkins 初始化配置。 #### 5. 配置 GitLabJenkins 集成 在 GitLab 中配置 Webhook,将推送事件发送到 Jenkins: - 进入 GitLab 项目页面 → Settings → Webhooks - 添加 Jenkins 的 Webhook URL,例如 `http://<jenkins-ip>:8080/gitlab/build_now` - 选择触发事件(如 push、tag push 等) - 生成并配置 Secret Token,确保 Jenkins 能够验证请求来源[^4] #### 6. Jenkins Pipeline 配置 在 Jenkins 中创建 Pipeline 项目,定义 CI/CD 流程: ```groovy pipeline { agent any stages { stage('Build') { steps { sh 'mvn clean package' } } stage('Build Docker Image') { steps { sh 'docker build -t registry.cn-hangzhou.aliyuncs.com/your-namespace/your-image:${GIT_COMMIT} .' } } stage('Push to ACR') { steps { sh 'docker login registry.cn-hangzhou.aliyuncs.com -u <username> -p <password>' sh 'docker push registry.cn-hangzhou.aliyuncs.com/your-namespace/your-image:${GIT_COMMIT}' } } stage('Deploy to Server') { steps { sshagent(['server-ssh-credentials']) { sh ''' ssh -o StrictHostKeyChecking=no user@target-server " \ docker pull registry.cn-hangzhou.aliyuncs.com/your-namespace/your-image:${GIT_COMMIT} && \ docker stop myapp || true && \ docker rm myapp || true && \ docker run -d --name myapp -p 80:80 registry.cn-hangzhou.aliyuncs.com/your-namespace/your-image:${GIT_COMMIT} " ''' } } } } } ``` #### 7. 配置阿里云容器镜像服务(ACR) 在阿里云控制台创建专属镜像仓库,并配置访问凭证: - 创建命名空间和镜像仓库 - 获取登录命令和凭证 - 在 Jenkins Pipeline 中使用 `docker login` 登录 ACR ### 实现持续集成与持续交付(CI/CD) 通过上述配置,整个流程如下: 1. 开发人员在 GitLab 上推送代码或打 Tag。 2. GitLab 触发 Webhook,通知 Jenkins 拉取最新代码。 3. Jenkins 执行构建、测试、打包、构建 Docker 镜像。 4. 镜像推送到阿里云 ACR。 5. Jenkins 在目标服务器上拉取镜像并部署新版本容器。 6. 部署完成后通知相关人员。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值