Integração com o Jenkins

Esta página explica como configurar o Jenkins para armazenar pacotes Maven criados num repositório do Artifact Registry.

Antes de começar

Se o repositório de destino não existir, crie um novo repositório.

Configurar o acesso ao seu repositório

  1. Crie uma conta de serviço dedicada para o Jenkins usar com o Artifact Registry.

    Execute o seguinte comando para criar uma conta de serviço com o nome jenkins-sa:

    gcloud iam service-accounts create jenkins-sa
    

    Isto cria uma conta de serviço denominada jenkins-sa@PROJECT.iam.gserviceaccount.com, onde PROJECT é o ID do seu projeto.

  2. No projeto que contém o repositório, conceda a função de escritor do Artifact Registry à conta de serviço do Jenkins que criou. Pode conceder a função para todos os repositórios no projeto ou conceder a função para os repositórios específicos aos quais a conta de serviço precisa de aceder.

    Para ver detalhes sobre as autorizações e a concessão de acesso por função, consulte o artigo Configurar o controlo de acesso.

Configurar um cluster do GKE

Quando configurar um novo cluster ou pool de nós do Google Kubernetes Engine, use a conta de serviço que criou para o Jenkins usar.

Consola

Para criar um cluster através da Google Cloud consola, siga os passos seguintes:

  1. Aceda ao menu Artifact Registry na Google Cloud consola.

    Visite o menu Artifact Registry

  2. Clique em Criar cluster.

  3. Configure o cluster conforme pretendido. Não clique ainda em Criar.

  4. Clique em Mais opções no conjunto de nós predefinido.

  5. Na secção Segurança, selecione a conta de serviço do Jenkins que criou.

  6. Clique em Guardar para sair da sobreposição.

  7. Clique em Criar.

gcloud

Use um dos seguintes comandos para criar o cluster com a conta de serviço do Jenkins. Nos comandos, PROJECT é o ID do seu projeto.

Para criar um cluster com a conta de serviço, execute o comando.

gcloud container clusters create example-cluster --service-account=jenkins-sa@PROJECT.iam.gserviceaccount.com

Para criar um node pool num cluster existente:

gcloud container node-pools create example-pool --service-account=jenkins-sa@PROJECT.iam.gserviceaccount.com

Consulte a documentação gcloud container clusters create para ver detalhes sobre o comando.

Configurar o Jenkins no GKE

  1. Siga o tutorial para configurar o Jenkins no GKE. Use o cluster que criou na secção anterior.

  2. No Jenkins, atualize o plug-in do GKE para a versão mais recente. Clique em Manage Jenkins > Manage Plugins > Updates.

Configure um projeto Maven

  1. Crie um fork do projeto Maven de exemplo no repositório do GitHub da documentação do Jenkins.

  2. Clone o repositório bifurcado.

    git clone git@github.com:USER_NAME/simple-java-maven-app.git
    
  3. Configure um novo pipeline na interface do Jenkins.

    1. Clique em Novo item.
    2. Selecione Pipeline.
    3. Defina um nome para o pipeline e clique em OK.
  4. No separador Geral, configure as seguintes opções na secção Pipeline:

    • Selecione Script de pipeline do SCM.
    • Na lista pendente SCM, selecione Git e, de seguida, especifique o URL e as credenciais para estabelecer ligação ao seu repositório do GitHub.

    Captura de ecrã das definições do pipeline

  5. Clique em Guardar.

Configurar a ligação ao repositório

Configure o Jenkins com o repositório e as credenciais para se ligar ao repositório.

  1. Adicione o seu repositório ao Maven pom.xml. Use o seguinte comando para imprimir um fragmento a adicionar.

    gcloud artifacts print-settings mvn [--project=PROJECT] \
    [--repository=REPOSITORY] [--location=LOCATION]
    

    Onde

    • PROJECT é o ID do projeto. Se esta flag for omitida, é usado o projeto atual ou predefinido.
    • REPOSITORY é o ID do repositório. Se configurou um repositório do Artifact Registry predefinido, este é usado quando esta flag é omitida do comando.
    • LOCATION é a localização regional ou multirregional do repositório.
  2. Crie um ficheiro YAML como modelo de pod para agentes do Jenkins.

    mkdir jenkins
    cat > jenkins/maven-pod.yaml << EOF
    apiVersion: v1
    kind: Pod
    spec:
      containers:
      - name: maven
        image: maven:3.3.9-jdk-8-alpine
        command: ['cat']
        tty: true
    EOF
    
  3. Modifique o ficheiro Jenkinsfile.

    pipeline {
        agent none
        stages {
            stage('Deploy') {
                steps {
                     agent {
                         kubernetes {
                             label 'mavenpod'
                             yamlFile 'jenkins/maven-pod.yaml'
                           }
                       }
                       container('maven') {
                       sh "mvn -B clean deploy"
                     }
                }
            }
        }
    }
    

Iniciar uma compilação

  1. Envie as alterações que fez para o projeto do GitHub.

    git add . && git commit -m "Configure my Jenkins pipeline" && git push
    
  2. Na interface do Jenkins, inicie uma nova compilação para a aplicação no seu projeto Maven de exemplo.

Quando a compilação for concluída com êxito, os artefactos são adicionados ao repositório de pacotes Java do Artifact Registry que criou.

Execute o seguinte comando para listar os pacotes no repositório:

gcloud artifacts packages list --repository=mvn-jenkins --location=LOCATION

O resultado tem um aspeto semelhante ao seguinte exemplo:

Listing items under project {YOUR_PROJECT}, repository mvn-jenkins.

PACKAGE                   CREATE_TIME          UPDATE_TIME
com.mycompany.app:my-app  2019-06-25T17:09:44  2019-06-25T17:09:44