Ouço!
Afinal, se as estrelas estão acesas,
significa que alguém precisa delas?
(V.V. Mayakovsky)
Prefácio
Acontece que há algum tempo, em um de meus empregos, tive que configurar ferramentas de desenvolvimento de código coletivo para um grupo de programadores Fortran . Primeiro, eles próprios montaram o Gitosis , depois o Trac , mas o tempo todo faltava alguma coisa. Havia problemas constantes com a injeção simultânea de código, bem como com o que é chamado de revisão de código ... Em geral, esse grupo de desenvolvedores cresceu para um sistema completo de desenvolvimento conjunto com CI / CD. Como o grupo não é rico, no momento da instalação do sistema de desenvolvimento conjunto, eles tinham um servidor dual-core fraco com 2 GB de RAM à sua disposição. Por esse motivo, a escolha recaiu sobre um bando de Gogs + Drone . Pequenos escritos em Go, praticamente sem nenhum "recurso" especial do programa. Mas, imediatamente após a próxima injeção de código, tornou-se possível verificar seu assembly e testar se ele funciona corretamente.
É assim que a versão atual do Drone 0.8 usado no modo "combate" se parece .
Atualizar
, , , 2021 . Gitea Drone . Gogs Gitea , . Drone 0.8 1.x , , , . , , — . Gitea + Drone 1.10 Drone 2.0 (13 2021 ), .
Drone 2.0
Drone CI . -, Drone CI Harness CI, :
, ( ). , : , , — ? , , Drone UI .
, , CSS . , , . , , , CSS Drone UI. , Drone GitHub Drone UI. , (.drone.yml) Drone UI. Drone UI . , , . — , :
go get -v -insecure xxx.com/xxx/drone-ui
sed -i '' 's/github.com\/drone\/drone-ui/xxx.com\/xxx\/drone-ui/' ./handler/web/{logout,pages,web}.go
( ), Drone Drone UI . - , , Node.js, . .
, , . drone : (clone), Go (test), drone-server (build) Docker- (publish). — .drone.yml, drone:
---
kind: pipeline
type: docker
name: linux-amd64
platform:
arch: amd64
os: linux
steps:
- name: test
image: golang:1.14.4
commands:
- go test ./...
- name: build
image: golang:1.14.4
commands:
- sh scripts/build.sh
environment:
GOARCH: amd64
GOOS: linux
- name: publish
image: plugins/docker:18
settings:
auto_tag: true
auto_tag_suffix: linux-amd64
dockerfile: docker/Dockerfile.server.linux.amd64
repo: drone/drone
username:
from_secret: docker_username
password:
from_secret: docker_password
when:
event:
- push
- tag
, , , Drone UI.
. drone:
- name: clone
image: drone/git
commands:
- export DRONE_TAG=v2.0.0
- export DRONE_COMMIT_REF=refs/tags/$DRONE_TAG
- export DRONE_REMOTE_URL=https://github.com/drone/drone.git
- clone
- name: clone drone-ui
image: drone/git
commands:
- export DRONE_COMMIT_BRANCH=drone2
- export DRONE_COMMIT_REF=refs/heads/$DRONE_COMMIT_BRANCH
- export DRONE_COMMIT_SHA=d96f1e26d4482663535cfc913f650956c914f27f
- export DRONE_REMOTE_URL=https://github.com/drone/drone-ui.git
- export DRONE_WORKSPACE=$DRONE_WORKSPACE_BASE/web
- clone
. , , drone/git.
- name: clone patch
image: drone/git
commands:
- export DRONE_WORKSPACE=$DRONE_WORKSPACE_BASE/patch
- mkdir -p $DRONE_WORKSPACE
- clone
. , Drone, , $DRONE_WORKSPACE_BASE
drone, patch
. , , :
clone:
disable: true
drone-ui - CSS .
- name: patch drone-ui
image: node:15.14.0
commands:
- cd $DRONE_WORKSPACE_BASE/web
- patch -p1 < ../patch/drone-ui-2.0-customize.patch
, web drone-ui, () drone-server.
— drone-ui:
- name: build drone-ui
image: node:15.14.0
commands:
- cd $DRONE_WORKSPACE_BASE/web
- npm install
- npm run build
environment:
CI: false
Node.js, drone-ui . , CI
false
, (warnings) .
drone-ui — . dist_gen.go
, drone. :
- name: generate drone-ui
image: golang:1.14.4
commands:
- cd $DRONE_WORKSPACE_BASE/web
- go get github.com/bradrydzewski/togo
- rm -vf dist/dist_gen.go
- go generate ./dist
. togo, dist_gen.go
:
go get github.com/bradrydzewski/togo
, , dist_gen.go
:
go generate ./dist
( ) . , , :
rm -vf dist/dist_gen.go
- name: replace drone-ui
image: golang:1.14.4
commands:
- cd $DRONE_WORKSPACE_BASE/web
- go mod init github.com/drone/drone-ui
- cd $DRONE_WORKSPACE_BASE
- go mod edit -replace=github.com/drone/drone-ui=./web
github.com/drone/drone-ui web:
go mod init github.com/drone/drone-ui
.
, , drone-ui , web:
go mod edit -replace=github.com/drone/drone-ui=./web
, . — ./web
. ./
, web.
- name: test
image: golang:1.14.4
commands:
- export GOPATH=$DRONE_WORKSPACE_BASE/go
- go test ./...
- name: build
image: golang:1.14.4
commands:
- export GOPATH=$DRONE_WORKSPACE_BASE/go
- sh scripts/build.sh
- strip -s -R .comment release/linux/$GOARCH/drone-server
environment:
GOARCH: amd64
GOOS: linux
—
export GOPATH=$DRONE_WORKSPACE_BASE/go
— , . , DRONE_WORKSPACE_BASE
/drone/src
, Drone CI.
,
strip -s -R .comment release/linux/$GOARCH/drone-server
, .
- name: publish
image: plugins/docker:18
settings:
tags: [ latest, "2", "2.0", "2.0.0" ]
dockerfile: docker/Dockerfile.server.linux.amd64
repo: drone/drone-server-customized
username:
from_secret: docker_username
password:
from_secret: docker_password
dry_run: true
when:
repo:
- tkushnir/drone-server-customized
branch:
- main
event:
exclude:
- pull_request
Drone 2.0 :
Gitea Drone .
, , Drone. , - . , , , Vue Node.js .
Durante a atualização do Drone 0.8 para o Drone 1.10 e posteriormente para o Drone 2.0, foi descoberto que as etapas antigas das montagens, que eram feitas na versão 0.8 e normalmente transferidas para a versão 1.10 pelo utilitário padrão, não são mais visíveis . Este problema foi resolvido de forma bastante simples. Se eu descrever as etapas de transição do Drone 0.8 para o Drone 2.0, também compartilharei essa experiência.
Também pode fazer sentido compartilhar os problemas (e suas soluções) que surgiram na transição do Gogs para as versões mais recentes do Gitea. Inicialmente, pensava-se que essa transição seria bastante simples, mas descobriu-se que também existem algumas armadilhas aqui.