声明式詹金斯管道

时间:2019-03-12 14:31:53

标签: jenkins kubernetes jenkins-pipeline

我正在使用声明性Jenkins管道。 我是詹金斯的新手,所以我不明白。我不知道如何处理此错误,有人可以告诉我什么是构建最佳选择。

我有bash脚本,用于构建,标记和推送docker映像到存储库。 这是我的Jenkinsfile的一部分;

pipeline {
  agent {
    kubernetes {
      label 'bmf-worker'
      defaultContainer 'jnlp'
      yaml """
apiVersion: v1
kind: Pod
metadata:
labels:
  component: ci
spec:
  # Use service account that can deploy to all namespaces
  serviceAccountName: service-reader
  containers:
  - name: docker
    image: docker
    command:
    - cat
    tty: true
  - name: kubectl
    image: gcr.io/cloud-builders/kubectl
    command:
    - cat
    tty: true
  - name: gcloud 
    image: google/cloud-sdk
    command: 
    - cat
    tty: true
"""
}
  }
  stages {
    stage('Code Checkout and Setup') {
      steps {
        echo 'Code Checkout and Setup'


      }
    }
    stage('Build') {
      parallel { 
        stage('Build') {
          steps {
            echo 'Start building Frontend and Backend Docker images'
          }
        }
        stage('Build BMF Frontend') {
          steps {
            container('gcloud') {
            echo 'Building Bmf Frontend Image'
            sh 'chmod +x build.sh'
            sh './build.sh --build_bmf_frontend'
          }
          }
        }
        stage('Tag BMF Frontend') {
          steps {
            container('gcloud') {
            echo 'Building Bmf Frontend Image'
            sh 'chmod +x build.sh'
            sh './build.sh --tag_frontend'
          }
          }
        }
        stage('Build BMF Backend') {
          steps {
            container('gcloud') {
            echo 'Buildinging Bmf Backend Images'
            sh 'chmod +x build.sh'
            sh './build.sh --build_bmf_backend'
          }
          }
        }
        stage('Tag BMF Backend') {
          steps {
            container('gcloud') {
            echo 'Building Bmf Frontend Image'
            sh 'chmod +x build.sh'
            sh './build.sh --tag_frontend'
          }
          }
        }
      }
    }

如何使用podTemplate执行我的步骤。在为阶段 Build BMF Backend 使用docker容器时,我遇到了这些错误;

  1. 无法通过unix:///var/run/docker.sock连接到Docker守护程序。 docker守护程序正在运行吗?
  2. /home/jenkins/workspace/BMF/bmf-web@tmp/durable-c146e810/script.sh:第1行:./ build.sh:未找到

使用在podTemplate中定义的gcloud容器;

  1. time =“ 2019-03-12T13:40:56Z” level = error msg =“无法拨打gRPC:无法连接到Docker守护程序。'docker daemon'是否在此主机上运行?:拨打unix /var/run/docker.sock:连接:没有这样的文件或目录“

  2. 无法通过unix:///var/run/docker.sock连接到Docker守护程序。 docker守护程序正在运行吗?

以及如何标记docker图像,因为我需要docker标记和git,因为标记是短提交。使用docker时没有git。

我的Jenkins管理员在Google Cloud Kubernetes上。

有人可以向我解释执行作业的更好解决方案。

1 个答案:

答案 0 :(得分:0)

您面临的第一个问题与Docker有关,而不与Jenkins有关。

Docker命令只能由root用户或docker组中的用户运行。

如果您希望Jenkins用户能够执行Docker命令,则可以以root用户身份运行以下命令以将Jenkins添加到Docker组:

usermod -aG docker jenkins

This is documented in the Docker docs

请注意,授予用户访问Docker的权限将有效地授予他们root权限,因此请谨慎添加到该组的用户。