Segui as instruções para configurar um registro de pacotes Debian para meu projeto GitLab.
- ✔️ Habilitei a API
- ✔️ Criei uma distribuição
- ✔️ Eu carreguei pacotes
Agora tenho um trabalho de CI que precisa puxar esses pacotes do registro. Segui as instruções e tentei isso no meu trabalho de CI:
curl --fail-with-body --header "Job-Token: ${CI_JOB_TOKEN}" "https://<my-gitlab-url>/api/v4/projects/45/debian_distributions/<my-codename>/key.asc" | gpg --dearmor | tee /usr/local/share/keyrings/<my-codename>-archive-keyring.gpg > /dev/null
apt-get update
Também adicionei isto ao arquivo sources.list:
deb [ signed-by=/usr/local/share/keyrings/<my-codename>-archive-keyring.gpg ] https://<my-gitlab-url>/api/v4/projects/45/packages/debian <my-codename> main
Por fim, criei /etc/apt/auth.conf.d/sources.conf
com:
echo "machine <my-gitlab-url> login gitlab-ci-token password ${CI_JOB_TOKEN}" > /etc/apt/auth.conf.d/sources.conf
Entretanto, quando apt-get update
realmente executado, obtenho a seguinte saída:
Err:5 https://<my-gitlab-url>/api/v4/projects/45/packages/debian <my-codeame> InRelease
401 Unauthorized [IP: 10.0.0.5 443]
Reading package lists...
E: Failed to fetch https://<my-gitlab-url>/api/v4/projects/45/packages/debian/dists/<my-codename>/InRelease 401 Unauthorized [IP: 10.0.0.5 443]
E: The repository 'https://<my-gitlab-url>/api/v4/projects/45/packages/debian <my-codename> InRelease' is not signed.
Com base no fato de que diz Unauthorized
, acho que há algo errado com a autenticação. Talvez CI_JOB_TOKEN
não funcione. Tentei fazer isso manualmente fora do CI usando um token de acesso pessoal e funcionou.
Atualizar
Adicionei isso ao meu .gitlab-ci.yml
arquivo
- echo "${CI_JOB_TOKEN:1}"
- echo "${CI_JOB_TOKEN::-1}"
para que eu pudesse bisbilhotar o CI_JOB_TOKEN
, então enquanto o trabalho estava em execução eu o inseri manualmente no /etc/apt/auth.conf.d/sources.conf
arquivo no meu computador e apt-get update
trabalhei enquanto o trabalho estava em execução. Depois que o trabalho terminou, apt-get update
não funcionou mais, pois o token expirou (como esperado). Então o processo funciona com o token, mas por algum motivo ele não funciona no CI...
Meu problema era que o
CI_JOB_TOKEN
não estava sendo passado corretamente para o meu trabalho. Eu o passei para o script de construção, mas eu precisava tambémexport
de lá para que o resto do meu fluxo de trabalho tivesse acesso ao token.Votarei para fechar esta questão porque está relacionada a um erro.