Gitea, DroneCI 및 Portainer
소개
당신은 빌드 환경을 만드는 일을 맡고 있으며 비교적 쉽고 반복 가능한 것을 원합니다.
위의 작업을 수행하기 위한 여정에서 많은 훌륭한 솔루션을 발견했습니다. Gitlab 및 Github와 같은 올인원 솔루션이 있지만 오픈 소스이고 무료이며 쉬운 솔루션을 원했습니다.
기테아
Gitea
Gitea는 배포하기 쉽고 훌륭한 온프레미스 리포지토리를 만드는 Github와 같은 것의 오픈 소스 버전입니다. 추가 이점은 선택한 이벤트에서 웹 후크를 트리거하도록 구성할 수 있는 Drone과의 기본 통합이 있다는 것입니다.
무인 비행기
Drone
Drone은 yaml 형식의 간단한 명령을 받아 파이프라인으로 실행하는 오픈 소스 CI 도구입니다. 그들은 모든 작업을 수행하는 주자의 개념을 가지고 있습니다. Docker, Kubernetes 또는 호스트에 필요한 러너를 설치하면 작업을 수신합니다.
러너:
도커
쿠버네티스
집행관
SSH
VM
포터테이너
Portainer
Portainer는 클라우드에서 컨테이너를 관리하고 여러 컨테이너 플랫폼(Kubernetes, Docker, Docker Swarm 및 Nomad)을 관리할 수 있는 컨테이너 관리 플랫폼입니다.
해결책:
도커 이미지로 캡슐화될 작은 Python 웹 서버를 만든 내 IDE로 VSCode를 사용하고 있습니다. 그런 다음 Docker 이미지가 생성되어 리포지토리로 전송된 다음 Kubernetes 배포에서 사용됩니다. 배포가 트리거되고 배포됩니다.
다음과 같이 표시됩니다.
[VSCode] -> [기테아] -> [드론] -> [포테이너] -> [배포]
Gitea 설치:
쿠버네티스:
helm install gitea gitea-charts/gitea -n gitea --values ./gitea_values.yml
gitea-values.yml(변경 사항)
ingress:
enabled: true
# className: nginx
className:
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts:
- host: git.chenetz.net
paths:
- path: /
pathType: Prefix
tls:
- secretName: git-chenetz-tls
hosts:
- git.chenetz.net
드론 설치:
쿠버네티스:
helm upgrade my-drone drone/drone -n drone --values ./drone-values.yaml
drone-values.yaml(변경 사항)
ingress:
enabled: true
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts:
- host: drone.chenetz.net
paths:
- path: /
pathType: Prefix
tls:
- secretName: chenetz-drone-tls
hosts:
- drone.chenetz.net
nv:
DRONE_WEBHOOK_SKIP_VERIFY: true
## REQUIRED: Set the user-visible Drone hostname, sans protocol.
## Ref: https://docs.drone.io/installation/reference/drone-server-host/
##
DRONE_SERVER_HOST: drone.chenetz.net
## The protocol to pair with the value in DRONE_SERVER_HOST (http or https).
## Ref: https://docs.drone.io/installation/reference/drone-server-proto/
##
DRONE_SERVER_PROTO: https
## REQUIRED: Set the secret secret token that the Drone server and its Runners will use
## to authenticate. This is commented out in order to leave you the ability to set the
## key via a separately provisioned secret (see existingSecretName above).
## Ref: https://docs.drone.io/installation/reference/drone-rpc-secret/
##
DRONE_RPC_SECRET: drone-runner
## If you'd like to use a DB other than SQLite (the default), set a driver + DSN here.
## Ref: https://docs.drone.io/installation/storage/database/
##
# DRONE_DATABASE_DRIVER:
# DRONE_DATABASE_DATASOURCE:
## If you are going to store build secrets in the Drone database, it is suggested that
## you set a database encryption secret. This must be set before any secrets are stored
## in the database.
## Ref: https://docs.drone.io/installation/storage/encryption/
##
# DRONE_DATABASE_SECRET:
## If you are using self-hosted GitHub or GitLab, you'll need to set this to true.
## Ref: https://docs.drone.io/installation/reference/drone-git-always-auth/
##
# DRONE_GIT_ALWAYS_AUTH: false
## ===================================================================================
## Provider Directives (select ONE)
## -----------------------------------------------------------------------------------
## Select one provider (and only one). Refer to the corresponding documentation link
## before filling the values in. Also note that you can use the 'secretMounts' value
## if you'd rather not have secrets in Kubernetes Secret instead of a ConfigMap.
## ===================================================================================
## GitHub-specific variables. See the provider docs here:
## Ref: https://docs.drone.io/installation/providers/github/
##
# DRONE_GITHUB_CLIENT_ID:
# DRONE_GITHUB_CLIENT_SECRET:
## GitLab-specific variables. See the provider docs here:
## Ref: https://docs.drone.io/installation/providers/gitlab/
##
# DRONE_GITLAB_CLIENT_ID:
# DRONE_GITLAB_CLIENT_SECRET:
# DRONE_GITLAB_SERVER:
## Bitbucket Cloud-specific variables. See the provider docs here:
## Ref: https://docs.drone.io/installation/providers/bitbucket-cloud/
##
# DRONE_BITBUCKET_CLIENT_ID:
# DRONE_BITBUCKET_CLIENT_SECRET:
## Bitbucket-specific variables. See the provider docs here:
## Ref: https://docs.drone.io/installation/providers/bitbucket-server/
##
# DRONE_GIT_USERNAME:
# DRONE_GIT_PASSWORD:
# DRONE_STASH_CONSUMER_KEY:
# DRONE_STASH_PRIVATE_KEY:
# DRONE_STASH_SERVER:
## Gitea-specific variables. See the provider docs here:
## Ref: https://docs.drone.io/installation/providers/gitea/
##
DRONE_GITEA_CLIENT_ID: [client id]
DRONE_GITEA_CLIENT_SECRET: [secret]
DRONE_GITEA_SERVER: https://git.chenetz.net
드론 도커 러너 설치:
쿠버네티스:
helm install my-drone-runner-docker drone/drone-runner-docker -n drone --values ./drone-runner-docker.yml
drone-runner-docker.yml(변경 사항)
env:
## The docker host to be used by the drone-runner-docker when connecting
## to the docker daemon, defaults to the dind(sidecar) docker daemon
DOCKER_HOST: "tcp://localhost:2375"
## REQUIRED: Set the secret secret token that the Docker runner will use
## to authenticate. This is commented out in order to leave you the ability to set the
## key via a separately provisioned secret (see extraSecretNamesForEnvFrom above).
## Ref: https://docs.drone.io/runner/docker/configuration/reference/drone-rpc-secret/
##
DRONE_RPC_SECRET: drone-runner
## The hostname/IP (and optionally the port) for your Kubernetes runner. Defaults to the "drone"
## service that the drone server Chart creates by default.
## Ref: https://docs.drone.io/runner/docker/configuration/reference/drone-rpc-host/
##
DRONE_RPC_HOST: drone.chenetz.net
## The protocol to use for communication with Drone server.
## Ref: https://docs.drone.io/runner/docker/configuration/reference/drone-rpc-proto/
##
DRONE_RPC_PROTO: https
DRONE_NAMESPACE_DEFAULT: drone
구성:
기테아:
무인 비행기
모든 것을 준비하고 통신한 후 .values.yml 파일을 내 저장소에 추가했습니다. 다음 드론 파이프라인 파일은 Gitea에서 푸시 또는 풀에서 트리거를 받은 후 도커 이미지를 생성합니다. 두 번째 단계는 리포지토리에서 manifest.yml의 배포를 트리거하도록 Portainer에서 구성된 웹후크를 트리거합니다.
kind: pipeline
name: default
type: docker
steps:
- name: docker
image: plugins/docker
settings:
username:
from_secret: docker-username
password:
from_secret: docker-password
repo: mchenetz/test
tags:
- latest
---
kind: pipeline
name: exec
type: exec
steps:
- name: deploy
commands:
- curl -X POST "https://192.168.10.12:9443/api/stacks/webhooks/"
도커파일
FROM python:latest
WORKDIR /src
COPY . .
CMD [ "python", "./test.py"]
소스(test.py)
from http.server import BaseHTTPRequestHandler, HTTPServer
import time
hostName = "localhost"
serverPort = 80
class MyServer(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write(bytes("<html><head><title>https://portainer.io</title></head>", "utf-8"))
self.wfile.write(bytes("<p>Request: %s</p>" % self.path, "utf-8"))
self.wfile.write(bytes("<body>", "utf-8"))
self.wfile.write(bytes("<p>This is an example web server on k8s.</p>", "utf-8"))
self.wfile.write(bytes("</body></html>", "utf-8"))
if __name__ == "__main__":
webServer = HTTPServer((hostName, serverPort), MyServer)
print("Server started http://%s:%s" % (hostName, serverPort))
try:
webServer.serve_forever()
except KeyboardInterrupt:
pass
webServer.server_close()
print("Server stopped.")
푸시 시 자동 트리거의 예:
도커 저장소:
포터이너 트리거:
결론:
하루가 끝나면... 설정하는 데 몇 단계가 필요한 것처럼 들릴 수 있지만 이제 코딩 파이프라인을 위한 완전한 환경이 있으며 모든 변경 사항이 자동으로 이미지를 빌드하고 배포합니다. 항상 원하는 것이 아닐 수 있으며 파이프라인을 수정하여 승인을 위해 중지를 삽입하고 더 일반적인 끌어오기로 변경할 수 있습니다.
Reference
이 문제에 관하여(Gitea, DroneCI 및 Portainer), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/mchenetz/gitea-droneci-and-portainer-3ig0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
도커 이미지로 캡슐화될 작은 Python 웹 서버를 만든 내 IDE로 VSCode를 사용하고 있습니다. 그런 다음 Docker 이미지가 생성되어 리포지토리로 전송된 다음 Kubernetes 배포에서 사용됩니다. 배포가 트리거되고 배포됩니다.
다음과 같이 표시됩니다.
[VSCode] -> [기테아] -> [드론] -> [포테이너] -> [배포]
Gitea 설치:
쿠버네티스:
helm install gitea gitea-charts/gitea -n gitea --values ./gitea_values.yml
gitea-values.yml(변경 사항)
ingress:
enabled: true
# className: nginx
className:
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts:
- host: git.chenetz.net
paths:
- path: /
pathType: Prefix
tls:
- secretName: git-chenetz-tls
hosts:
- git.chenetz.net
드론 설치:
쿠버네티스:
helm upgrade my-drone drone/drone -n drone --values ./drone-values.yaml
drone-values.yaml(변경 사항)
ingress:
enabled: true
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts:
- host: drone.chenetz.net
paths:
- path: /
pathType: Prefix
tls:
- secretName: chenetz-drone-tls
hosts:
- drone.chenetz.net
nv:
DRONE_WEBHOOK_SKIP_VERIFY: true
## REQUIRED: Set the user-visible Drone hostname, sans protocol.
## Ref: https://docs.drone.io/installation/reference/drone-server-host/
##
DRONE_SERVER_HOST: drone.chenetz.net
## The protocol to pair with the value in DRONE_SERVER_HOST (http or https).
## Ref: https://docs.drone.io/installation/reference/drone-server-proto/
##
DRONE_SERVER_PROTO: https
## REQUIRED: Set the secret secret token that the Drone server and its Runners will use
## to authenticate. This is commented out in order to leave you the ability to set the
## key via a separately provisioned secret (see existingSecretName above).
## Ref: https://docs.drone.io/installation/reference/drone-rpc-secret/
##
DRONE_RPC_SECRET: drone-runner
## If you'd like to use a DB other than SQLite (the default), set a driver + DSN here.
## Ref: https://docs.drone.io/installation/storage/database/
##
# DRONE_DATABASE_DRIVER:
# DRONE_DATABASE_DATASOURCE:
## If you are going to store build secrets in the Drone database, it is suggested that
## you set a database encryption secret. This must be set before any secrets are stored
## in the database.
## Ref: https://docs.drone.io/installation/storage/encryption/
##
# DRONE_DATABASE_SECRET:
## If you are using self-hosted GitHub or GitLab, you'll need to set this to true.
## Ref: https://docs.drone.io/installation/reference/drone-git-always-auth/
##
# DRONE_GIT_ALWAYS_AUTH: false
## ===================================================================================
## Provider Directives (select ONE)
## -----------------------------------------------------------------------------------
## Select one provider (and only one). Refer to the corresponding documentation link
## before filling the values in. Also note that you can use the 'secretMounts' value
## if you'd rather not have secrets in Kubernetes Secret instead of a ConfigMap.
## ===================================================================================
## GitHub-specific variables. See the provider docs here:
## Ref: https://docs.drone.io/installation/providers/github/
##
# DRONE_GITHUB_CLIENT_ID:
# DRONE_GITHUB_CLIENT_SECRET:
## GitLab-specific variables. See the provider docs here:
## Ref: https://docs.drone.io/installation/providers/gitlab/
##
# DRONE_GITLAB_CLIENT_ID:
# DRONE_GITLAB_CLIENT_SECRET:
# DRONE_GITLAB_SERVER:
## Bitbucket Cloud-specific variables. See the provider docs here:
## Ref: https://docs.drone.io/installation/providers/bitbucket-cloud/
##
# DRONE_BITBUCKET_CLIENT_ID:
# DRONE_BITBUCKET_CLIENT_SECRET:
## Bitbucket-specific variables. See the provider docs here:
## Ref: https://docs.drone.io/installation/providers/bitbucket-server/
##
# DRONE_GIT_USERNAME:
# DRONE_GIT_PASSWORD:
# DRONE_STASH_CONSUMER_KEY:
# DRONE_STASH_PRIVATE_KEY:
# DRONE_STASH_SERVER:
## Gitea-specific variables. See the provider docs here:
## Ref: https://docs.drone.io/installation/providers/gitea/
##
DRONE_GITEA_CLIENT_ID: [client id]
DRONE_GITEA_CLIENT_SECRET: [secret]
DRONE_GITEA_SERVER: https://git.chenetz.net
드론 도커 러너 설치:
쿠버네티스:
helm install my-drone-runner-docker drone/drone-runner-docker -n drone --values ./drone-runner-docker.yml
drone-runner-docker.yml(변경 사항)
env:
## The docker host to be used by the drone-runner-docker when connecting
## to the docker daemon, defaults to the dind(sidecar) docker daemon
DOCKER_HOST: "tcp://localhost:2375"
## REQUIRED: Set the secret secret token that the Docker runner will use
## to authenticate. This is commented out in order to leave you the ability to set the
## key via a separately provisioned secret (see extraSecretNamesForEnvFrom above).
## Ref: https://docs.drone.io/runner/docker/configuration/reference/drone-rpc-secret/
##
DRONE_RPC_SECRET: drone-runner
## The hostname/IP (and optionally the port) for your Kubernetes runner. Defaults to the "drone"
## service that the drone server Chart creates by default.
## Ref: https://docs.drone.io/runner/docker/configuration/reference/drone-rpc-host/
##
DRONE_RPC_HOST: drone.chenetz.net
## The protocol to use for communication with Drone server.
## Ref: https://docs.drone.io/runner/docker/configuration/reference/drone-rpc-proto/
##
DRONE_RPC_PROTO: https
DRONE_NAMESPACE_DEFAULT: drone
구성:
기테아:
무인 비행기
모든 것을 준비하고 통신한 후 .values.yml 파일을 내 저장소에 추가했습니다. 다음 드론 파이프라인 파일은 Gitea에서 푸시 또는 풀에서 트리거를 받은 후 도커 이미지를 생성합니다. 두 번째 단계는 리포지토리에서 manifest.yml의 배포를 트리거하도록 Portainer에서 구성된 웹후크를 트리거합니다.
kind: pipeline
name: default
type: docker
steps:
- name: docker
image: plugins/docker
settings:
username:
from_secret: docker-username
password:
from_secret: docker-password
repo: mchenetz/test
tags:
- latest
---
kind: pipeline
name: exec
type: exec
steps:
- name: deploy
commands:
- curl -X POST "https://192.168.10.12:9443/api/stacks/webhooks/"
도커파일
FROM python:latest
WORKDIR /src
COPY . .
CMD [ "python", "./test.py"]
소스(test.py)
from http.server import BaseHTTPRequestHandler, HTTPServer
import time
hostName = "localhost"
serverPort = 80
class MyServer(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write(bytes("<html><head><title>https://portainer.io</title></head>", "utf-8"))
self.wfile.write(bytes("<p>Request: %s</p>" % self.path, "utf-8"))
self.wfile.write(bytes("<body>", "utf-8"))
self.wfile.write(bytes("<p>This is an example web server on k8s.</p>", "utf-8"))
self.wfile.write(bytes("</body></html>", "utf-8"))
if __name__ == "__main__":
webServer = HTTPServer((hostName, serverPort), MyServer)
print("Server started http://%s:%s" % (hostName, serverPort))
try:
webServer.serve_forever()
except KeyboardInterrupt:
pass
webServer.server_close()
print("Server stopped.")
푸시 시 자동 트리거의 예:
도커 저장소:
포터이너 트리거:
결론:
하루가 끝나면... 설정하는 데 몇 단계가 필요한 것처럼 들릴 수 있지만 이제 코딩 파이프라인을 위한 완전한 환경이 있으며 모든 변경 사항이 자동으로 이미지를 빌드하고 배포합니다. 항상 원하는 것이 아닐 수 있으며 파이프라인을 수정하여 승인을 위해 중지를 삽입하고 더 일반적인 끌어오기로 변경할 수 있습니다.
Reference
이 문제에 관하여(Gitea, DroneCI 및 Portainer), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mchenetz/gitea-droneci-and-portainer-3ig0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)