使用服务连接

服务连接是一个对不同类型的服务进行连接的功能,目前支持的类型有:SSH、Http Basic Auth 和 Docker Registry,可用于在持续集成、部署任务过程中根据服务连接获得的「凭据 ID」访问服务连接配置。

服务连接列表

服务连接列表是该项目的所有服务连接的列表视图,列表包含已创建的服务连接列表。

入口:【项目】→ 【设置】→【开发者选项】→【服务连接】。

创建服务连接

创建 SSH 类型的服务链接

在【服务连接列表】页点击“新增连接”,下拉框选择 SSH 类型,页面跳转到创建服务连接页面,输入连接信息,点击“新建连接”即可。

创建服务连接包含以下属性:

  • 连接名称,长度不超过 255 个字符;
  • 主机地址;
  • 端口;
  • 用户名;
  • 认证方式:密码或者密钥 。

创建 Http Basic Auth 类型的服务连接

在列表页点击“新增连接”,下拉框选择 Http Basic Auth 类型,页面跳转到创建服务连接页面,输入连接信息,点击“新建连接”即可。

创建服务连接包含以下属性:

  • 连接名称,长度不超过 255 个字符;
  • URL;
  • 用户名;
  • 密码。

创建 Docker Registry 类型的服务连接

在列表页点击“新增连接”,下拉框选择 Docker Registry 类型,页面跳转到创建服务连接页面,输入连接信息,点击“新建连接”即可。

服务连接详情

查看服务连接详情

服务连接详情页展示了服务连接的服务器信息。

入口:【服务连接列表】→已创建的服务连接中,“操作”一栏下方→【详情】。

允许使用此连接的任务

勾选后,则此项目中持续集成的任务拥有权限使用该服务连接的凭据 ID。

使用服务连接

在项目持续集成的 Jenkinsfile 文件里,在需要授权连接服务时,通过 credentialsId 来引用凭据 ID 验证。

使用 SSH 类型的凭据 ID

譬如,我想检出另外一个代码仓库的代码,我把连接到另外这个代码仓库的信息以 SSH 类型保存下来,从而取得这个服务连接的凭据 ID。现在在 Jenkinsfile 里即可在需要的地方通过凭据 ID 检出仓库代码。

如图,我设置了连接到另外一个代码仓库的服务,获得凭据 ID。

在 Jenkinsfile 中,按照如下格式填写 branches、SSH 形式的仓库地址 url 等信息对这个代码仓库进行检出,其中通过 credentialsId 来引用凭据 ID :

pipeline {
  agent any
  stages {
    stage('检出') {
      steps {
        sh 'ci-init'
        checkout([$class: 'GitSCM', branches: [[name: 'master']], 
        userRemoteConfigs: [[url: 'git@e.coding.net:codingcorp/test0102.git', credentialsId: '9eefc194-54b6-xxxx-xxxxxxxxxxxx' ]]])
      }
    }
  }
}

执行持续集成构建后,可以看到输出日志成功:

注意:使用 SSH 类型来连接代码仓库时,认证方式请选择密钥,并使用你自己的 SSH 密钥来进行认证。设置完毕后记得勾选“允许使用此连接的任务”。

使用 HTTP 类型的凭据 ID

譬如,我想检出另外一个代码仓库的代码,我把连接到另外这个代码仓库的信息以 HTTP 类型保存下来,从而取得这个服务连接的凭据 ID。现在在 Jenkinsfile 里即可在需要的地方通过凭据 ID 检出仓库代码。

如图,我设置了连接到另外一个代码仓库的服务,获得凭据 ID。

在 Jenkinsfile 中,按照如下格式填写 branches、HTTP 形式的仓库地址 url 等信息对这个代码仓库进行检出,其中通过 credentialsId 来引用凭据 ID :

pipeline {
  agent any
  stages {
    stage('检出') {
      steps {
        sh 'ci-init'
        checkout([$class: 'GitSCM', branches: [[name: 'master']], 
        userRemoteConfigs: [[url: 'https://e.coding.net/codingcorp/test0102.git', credentialsId: 'd091422a-32cb-4b80-xxxx-xxxxxxxxxxxx' ]]])
      }
    }
  }
}

执行持续集成构建后,可以看到输出日志成功:

使用 Docker Registry 类型的凭据 ID

我们借助「制品库」功能,将之后将构建好的镜像上传到制品库里,实现一个从构建镜像、打包镜像到推送镜像的完整过程。

1. 创建 Docker 类型的制品仓库

如图,创建完后我们将得到这个制品仓库的 URL。(仓库链接不包含 ,比如我这个制品仓库的 URL 为 codingcorp-docker.pkg.coding.net/code-repo/docker-hub )

2. 创建 Docker Registry 类型的服务连接

在 URL 填上我们上一步拿到的制品仓库链接;用户名和密码为你在 CODING 的账号信息。

3. 编辑 Jenkinsfile

我们将在持续集成的最后一步将构建好的镜像上传到制品库里,此时将上一步获得的凭据 ID 放在 credentialsId 中。

请把里面的制品库地址、凭据 ID 以及各步骤命令按照自己的实际情况进行替换。

pipeline {
agent any
stages {
 stage('检出') {
   steps {
     sh 'ci-init'
     checkout([$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
     userRemoteConfigs: [[url: env.GIT_REPO_URL]]])
   }
 }
 stage('安装依赖') {
   steps {
     sh 'curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -'
     sh 'apt install -y nodejs'
     sh 'npm install'
   }
 }
 stage('单元测试') {
   steps {
     sh 'npm test'
   }
 }
 stage('依赖漏洞扫描') {
   steps {
     sh 'npm audit'
   }
 }
 stage('打包镜像') {
   steps {
     sh "docker build -t nodejs-demo:${env.GIT_BUILD_REF} -t codingcorp-docker.pkg.coding.net/code-repo/docker-hub/nodejs-demo:latest ."
     //请把制品库地址替换成你自己的。
   }
 }
 stage('镜像推送') {
   steps {
     script {
       try {
         withCredentials([usernamePassword(credentialsId: 'f161210d-339c-4e55-xxxx-xxxxxxxxxxxx', usernameVariable: 'REGISTRY_USER', passwordVariable: 'REGISTRY_PASS')]) {
           //请把凭据 ID 替换成你自己的。
           sh "echo ${REGISTRY_PASS} | docker login -u ${REGISTRY_USER} --password-stdin codingcorp-docker.pkg.coding.net"
           sh "docker images"
           sh "docker push codingcorp-docker.pkg.coding.net/code-repo/docker-hub/nodejs-demo:latest"
           //请把制品库地址替换成你自己的。
         }
       } catch(err) {
         echo err.getMessage()
       }
     }

   }
 }
}
}
4. 勾选“允许使用此连接的任务”

在服务连接详情页,勾选我们上一步创建好的持续集成任务。

5. 执行持续集成构建

我们成功地将构建好的镜像,通过凭据 ID 上传到了制品库内。

移除服务链接

移除连接后使用本连接的持续集成与自动部署任务将会停止。

在具体的服务连接详情页,点击【修改连接】→【移除】。

上一篇图形化编辑器可用步骤说明
文档是否对您有用?
感谢反馈有用
感谢反馈没用