Como configurar o Jenkins no Google Kubernetes Engine

Neste tutorial, mostramos como configurar o Jenkins no GKE para ajudar a orquestrar seu pipeline de entrega de software.

Objetivos

  • Criar um cluster do Kubernetes com o GKE.
  • Instalar o Jenkins usando o Helm.
  • Conectar ao Jenkins.

Custos

Neste tutorial, há componentes faturáveis do Google Cloud, entre eles:

  • Compute Engine
  • Google Kubernetes Engine
  • Cloud Build

Use a calculadora de preços para gerar uma estimativa de custo com base no uso previsto. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. Ative as APIs Compute Engine, GKE, and Cloud Build.

    Ative as APIs

Como preparar o ambiente

Primeiro, prepare o ambiente de implantação.

  1. Ative o Cloud Shell. Ele fornece acesso à linha de comando no Console do Cloud e inclui o SDK do Cloud, além de outras ferramentas necessárias para o desenvolvimento do Google Cloud. O provisionamento do Cloud Shell pode levar vários minutos.

    Ativar o Cloud Shell

    Após a conclusão do processo, você verá a saída a seguir:

    Welcome to Cloud Shell! For help, visit https://cloud.google.com/cloud-shell/help.
    
  2. Defina a zona padrão do Compute Engine como us-east1-d:

    gcloud config set compute/zone us-east1-d
    
  3. Clone o código de amostra ou faça o download do arquivo ZIP.

    git clone https://github.com/GoogleCloudPlatform/continuous-deployment-on-kubernetes.git
    

    O repositório Git contém os manifestos Kubernetes usados para implantar o Jenkins. Os manifestos e as respectivas configurações estão descritos em Como configurar o Jenkins para o GKE.

  4. Acesse o diretório do código de amostra:

    cd continuous-deployment-on-kubernetes
    

Criar um cluster do Kubernetes

Use o GKE para criar e gerenciar o cluster do Kubernetes.

  1. Provisione um cluster do Kubernetes usando o GKE. Essa etapa pode levar vários minutos para ser concluída.

    gcloud container clusters create jenkins-cd \
      --machine-type n1-standard-2 --num-nodes 2 \
      --scopes "https://www.googleapis.com/auth/source.read_write,cloud-platform" \
      --cluster-version 1.15
    

    Com os escopos extras, o Jenkins tem acesso ao Cloud Source Repositories e ao Container Registry.

  2. Confirme se o cluster está em execução.

    gcloud container clusters list
    

    Procure RUNNING na coluna STATUS.

    NAME        LOCATION    MASTER_VERSION  MASTER_IP    MACHINE_TYPE   NODE_VERSION  NUM_NODES  STATUS
    jenkins-cd  us-east1-d  1.15.11-gke.15     35.231.8.57  n1-standard-2  1.15.11-gke.15   2          RUNNING
    
  3. Confirme se é possível se conectar ao cluster.

    kubectl cluster-info
    

    Em caso afirmativo, os URLs do componente Kubernetes serão exibidos.

    Kubernetes master is running at https://130.211.178.38
    GLBCDefaultBackend is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/default-http-backend
    Heapster is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/heapster
    KubeDNS is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/kube-dns
    Metrics-server is running at https://130.211.178.38/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
    

Como instalar o Helm

Use o Helm para implantar o Jenkins no repositório.

  1. Faça o download e a instalação do binário do Helm:

    wget https://get.helm.sh/helm-v3.2.1-linux-amd64.tar.gz
    
  2. Descompacte o arquivo no sistema local:

    tar zxfv helm-v3.2.1-linux-amd64.tar.gz
    cp linux-amd64/helm .
    
  3. Adicione a si mesmo como administrador de clusters no RBAC do cluster para conceder permissões ao Jenkins no cluster:

    kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin \
            --user=$(gcloud config get-value account)
    
  4. Adicione o repositório estável oficial:

    ./helm repo add jenkinsci https://charts.jenkins.io
    ./helm repo update
    
  5. Verifique se o Helm está instalado corretamente. Para isso, execute o comando a seguir:

    ./helm version
    

    Você verá versões para o cliente como v3.2.1:

    version.BuildInfo{Version:"v3.2.1", GitCommit:"fe51cd1e31e6a202cba7dead9552a6d418ded79a", GitTreeState:"clean", GoVersion:"go1.13.10"}
    

Instalar o Jenkins

Use um arquivo de valores personalizado para configurar a instalação do Jenkins. Para detalhes sobre a configuração, consulte o arquivo jenkins/values.yaml.

  1. Use a CLI do Helm para implantar o gráfico com o conjunto de configurações:

    ./helm install cd-jenkins -f jenkins/values.yaml jenkinsci/jenkins --version 2.6.4 --wait
    

    Para mais informações sobre como configurar a instalação do Jenkins, visite a página de documentação do gráfico Jenkins (em inglês).

  2. Depois que o comando for concluído, certifique-se de que o pod do Jenkins vá para o estado Running e o contêiner esteja no estado READY:

    kubectl get pods
    

    Você verá 1/1 na coluna READY e Running na coluna STATUS. A inicialização do Jenkins pode levar alguns minutos para ser concluída.

    NAME                          READY     STATUS    RESTARTS   AGE
    cd-jenkins-7c786475dd-vbhg4   1/1       Running   0          1m
    
  3. No Cloud Shell, configure o encaminhamento de portas para a IU do Jenkins:

    export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/component=jenkins-master" -l "app.kubernetes.io/instance=cd-jenkins" -o jsonpath="{.items[0].metadata.name}")
    kubectl port-forward $POD_NAME 8080:8080 >> /dev/null &
    
  4. Verifique se o serviço do Jenkins foi criado corretamente.

    kubectl get svc
    

    Exemplo de saída:

    NAME               CLUSTER-IP     EXTERNAL-IP   PORT(S)     AGE
    cd-jenkins         10.35.249.67   <none>        8080/TCP    3h
    cd-jenkins-agent   10.35.248.1    <none>        50000/TCP   3h
    kubernetes         10.35.240.1    <none>        443/TCP     9h
    

Na instalação do Jenkins, o plug-in do Kubernetes (em inglês) é usado para criar agentes de criador. Eles serão lançados automaticamente, conforme necessário quando o mestre do Jenkins precisar executar uma compilação. Quando o trabalho for concluído, eles serão automaticamente finalizados, e os respectivos recursos serão adicionados novamente ao pool de recursos do cluster.

Estabelecer conexão com o Jenkins

  1. Recupere a senha de administrador que foi criada automaticamente pelo gráfico Helm do Jenkins:

    printf $(kubectl get secret cd-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
    
  2. Para abrir a interface do usuário do Jenkins, no Cloud Shell, clique em Visualização da Web e em Visualizar na porta 8080.

    port8080

  3. Clique em Fazer login no canto superior direito da janela. Insira admin no campo Usuário e o valor da senha da etapa anterior no campo Senha.

  4. Clique no botão Fazer login.

Agora você tem acesso ao Jenkins e a um cluster do Kubernetes gerenciado pelo GKE. Para levar essa solução adiante, use esses componentes no seu pipeline de entrega contínua.

Limpar

Depois de concluir este tutorial, limpe os recursos que você criou no GCP para que não sejam faturados.

Como excluir o projeto

O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.

Para excluir o projeto:

  1. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

Como excluir discos

  1. No Console do Cloud, acesse a página Discos.

    Acessar "Discos"

  2. Marque a caixa de seleção de seu disco jenkins-home.
  3. Para excluir o disco, clique em Excluir.

Como excluir instâncias

Para excluir uma instância do Compute Engine, faça o seguinte:

  1. No Console do Cloud, acesse a página Instâncias de VM.

    Acessar instâncias de VM

  2. Marque a caixa de seleção de a instância que você quer excluir.
  3. Para excluir a instância, clique em Mais ações, clique em Excluir e siga as instruções.

A seguir