tencent cloud

文档反馈

Docker 服务器

最后更新时间:2023-12-29 11:44:51
    本文为您介绍如何通过持续集成将项目发布至 Docker 服务器。

    前提条件

    设置 CODING 持续集成中构建环境前,您的腾讯云账号需要开通 CODING DevOps 服务。

    进入项目

    1. 登录 CODING 控制台,单击团队域名进入 CODING 使用页面。
    2. 单击页面右上角的
    
    ,进入项目列表页面,单击项目图标进入目标项目。
    3. 进入左侧菜单栏的持续集成功能。

    获取 SSH 密钥对

    登录服务器控制台,创建 SSH 密钥对。获取私钥对后将其录入至 CODING 中的项目令牌中,将公钥 id_rsa.pub 的内容复制到服务器的 ~/.ssh/authorized_keys 中。
    

    获取制品仓库信息

    1. 按照提示一键获取 Docker 仓库的用户名与密码,并将其录入持续集成的环境变量中。
    
    2. 在构建计划详情中的变量与缓存处填写。
    

    Jenkinsfile

    在构建计划设置中的流程配置中参考以下配置进行填写。
    pipeline {
    agent any
    stages {
    stage('检出') {
    steps {
    checkout([$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
    userRemoteConfigs: [[url: env.GIT_REPO_URL, credentialsId: env.CREDENTIALS_ID]]])
    }
    }
    stage('构建') {
    steps {
    echo '构建中...'
    script {
    // 请修改 dockerServer、dockerPath、imageName
    dockerServer = 'codes-farm-docker.pkg.coding.net'
    dockerPath = '/laravel-demo/laravel-docker'
    imageName = "${dockerServer}${dockerPath}/laravel-demo:1.0.0"
    def customImage = docker.build(imageName)
    
    // 推送 Docker 镜像到仓库
    docker.withRegistry("https://${dockerServer}", CODING_ARTIFACTS_CREDENTIALS_ID) {
    customImage.push()
    }
    }
    }
    }
    stage('部署') {
    steps {
    echo '部署中...'
    script {
    // 声明服务器信息
    def remote = [:]
    remote.name = 'web-server'
    remote.allowAnyHosts = true
    remote.host = '106.54.86.239'
    remote.port = 22
    remote.user = 'ubuntu'
    
    // 把「CODING 凭据管理」中的「凭据 ID」填入 credentialsId,而 id_rsa 无需修改
    withCredentials([sshUserPrivateKey(credentialsId: "c4af855d-402a-4f38-9c83-f6226ae3441c", keyFileVariable: 'id_rsa')]) {
    remote.identityFile = id_rsa
    
    // SSH 登录到服务器,拉取 Docker 镜像
    // 请在持续集成的环境变量中配置 DOCKER_USER 和 DOCKER_PASSWORD
    sshCommand remote: remote, sudo: true, command: "apt-get install -y gnupg2 pass"
    sshCommand remote: remote, command: "docker login -u ${env.DOCKER_USER} -p ${env.DOCKER_PASSWORD} $DOCKER_SERVER"
    sshCommand remote: remote, command: "docker pull ${imageName}"
    sshCommand remote: remote, command: "docker stop web | true"
    sshCommand remote: remote, command: "docker rm web | true"
    sshCommand remote: remote, command: "docker run --name web -d ${imageName}"
    }
    }
    }
    }
    }
    }

    Docker Compose

    Docker Compose 的代码和上述类似,仅有少许不同:
    sshCommand remote: remote, sudo: true, command: "apt-get install -y gnupg2 pass"
    sshCommand remote: remote, command: "docker login -u ${env.DOCKER_USER} -p ${env.DOCKER_PASSWORD} $DOCKER_SERVER"
    sshCommand remote: remote, sudo: true, command: "mkdir -p /var/www/site/"
    sshCommand remote: remote, sudo: true, command: "chmod 777 /var/www/site/"
    sshPut remote: remote, from: 'docker-compose.yml', into: '/var/www/site/'
    sshCommand remote: remote, command: "cd /var/www/site/ && echo IMAGE=${imageName} > .env && echo APP_KEY=${env.APP_KEY} >> .env && echo DB_CONNECTION=sqlite >> .env"
    sshCommand remote: remote, command: "cd /var/www/site/ && docker-compose down --remove-orphans"
    sshCommand remote: remote, command: "cd /var/www/site/ && docker-compose up -d --no-build"
    docker-compose.yml 代码:
    version: '2.1'
    services:
    web:
    env_file: .env
    build: .
    image: ${IMAGE:-laravel-demo:dev}
    ports:
    - "80:80"
    links:
    - redis
    redis:
    image: "redis:5"
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持