Содержание

Jenkins

Документация: https://www.jenkins.io/doc/
Jenkins с открытыми пайплайнами: https://ci.xwiki.org/

Статьи:
Jenkins Pipeline. Что это и как использовать в тестировании
Многопоточный CI-контур для 1С c Packer, Vagrant и Jenkins

Видео:
Jenkins Tutorial For Beginners
Kirill Semaev - Jenkins playlist
Technoworld with Nana - Jenkins Tutorial for Beginners
CloudBeesTV - Jenkins tutorials (Jenkins + Docker)

Docker

Тонкость в том, что если Jenkins работает в контейнере, то желательно запускать сборки на хостовом Докере, а не городить вложенные контейнеры. Что для этого нужно:

  1. Примонтировать /var/run/docker.sock внутрь контейнера Jenkins.
  2. Установить docker-cli в контейнере Jenkins.
  3. Создать группу docker в контейнере Jenkins и включить туда пользователя jenkins.
  4. GID группы docker в контейнере Jenkins должен совпадать с GID группы docker хоста.
# На хосте нужно задать системную переменную
export DOCKERGID=$(grep ^docker /etc/group |cut -d: -f 3)
# Она нужна, чтобы её значение использовать параметре ARG в Dockerfile

https://stackoverflow.com/questions/47390515/docker-compose-args-from-shell

# This docker-compose file intent to run a Jenkins container connected to the host machine Docker daemon.
#
# A discussion about potential security issues and improvements on this approach can be found at:
# https://forums.docker.com/t/using-docker-in-a-dockerized-jenkins-container/322/11
# 
# Source: http://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/

version: '3.1'

volumes:
    jenkins-data:

services:

  jenkins:
    image: jenkinsci/blueocean
    restart: always
    ports:
      - 8080:8080
      - 50000:50000
    tty: true
    volumes:
      - jenkins-data:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock

https://gist.github.com/adelmofilho/5e4b2a57b402e218300332dd0a88a881

Dockerfile
FROM jenkins/jenkins 
 
USER 0
 
ARG DOCKERGID=998
 
# Docker
RUN apt-get update \
    && apt-get install software-properties-common apt-transport-https ca-certificates gnupg-agent dialog apt-utils -y \ 
    && curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - \
    && add-apt-repository \
        "deb [arch=amd64] https://download.docker.com/linux/debian \
        $(lsb_release -cs) \
        stable" \
    && apt-get update \
    && apt-get install docker-ce-cli -y
 
# Setup users and groups
RUN addgroup --gid ${DOCKERGID} docker
RUN usermod -aG docker jenkins
 
USER 1000

https://stackoverflow.com/questions/63095927/give-permission-to-jenkins-to-access-unix-var-run-docker-sock

Для варианта с Alpine:

Dockerfile
FROM jenkins/jenkins:alpine
 
USER 0
 
ARG DOCKERGID=998
 
# Docker
RUN apk -U update && apk add docker-cli
 
# Setup users and groups
RUN addgroup -g ${DOCKERGID} docker
RUN addgroup jenkins docker
 
USER 1000

Using a remote Docker server
Docker inside Docker for Jenkins
Google: jenkins /var/run/docker.sock

docker run --rm --name jenkins -p 8080:8080 -p 50000:50000 jenkins/jenkins:2.303.1-jdk8
docker run --rm --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:2.303.1-jdk8
docker run --rm --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:2.303.2-jdk8
docker run --rm --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:2.303.2-jdk11

https://gist.github.com/darinpope/39e4718919d22bc22f470ad3e94f8df1

Проекты

Freestyle - для простых одиночных задач, например, тестирования. Несколько таких проектов можно объединить, чтобы они шли один за другим.
Pipeline - полный цикл сборки, может иметь несколько этапов (stages). Применяется к одной ветке.
Multibranch pipeline - пайплайн для сразу нескольких веток репозитория.

Credentials

Scope: