Drone plugin 개발

4647 단어 drone
Drone plugin
1. 소개
Drone plugin은 Drone 환경 변수와 함께 사용할 수 있는 특정 작업을 수행하는 프로그램을 포함하는 특수 Docker 컨테이너입니다.drone.yaml의 설정 매개 변수입니다.
Environment Variables
Write a plugin in Bash
Write a plugin in Go
에 있습니다.drone.yaml에서 용기에 전달되는 파라미터를 설정합니다. 이 파라미터는 환경 변수로 용기에 전달되고 접두사는 PLUGIN_입니다.
kind: pipeline
type: docker
name: default

steps:
- name: webhook
  image: janecitizen/slack
  settings:
    webhook: https://hooks.slack.com/services/...
    channel: general
    text: hello
PLUGIN_CHANNEL=general
PLUGIN_WEBHOOK=https://hooks.slack.com/services/...
PLUGIN_TEXT=hello

2.git push용 플러그인 개발
2.1 docker 컨테이너에 SSH keys 사용
Using SSH keys inside docker container
SSH 키 추가 관련 섹션
# Authorize SSH Host
RUN mkdir -p /root/.ssh && \
    chmod 0700 /root/.ssh && \
    ssh-keyscan github.com > /root/.ssh/known_hosts

# Add the keys and set permissions
RUN echo "$ssh_prv_key" > /root/.ssh/id_rsa && \
    echo "$ssh_pub_key" > /root/.ssh/id_rsa.pub && \
    chmod 600 /root/.ssh/id_rsa && \
    chmod 600 /root/.ssh/id_rsa.pub

2.2Git용 SSH 매개변수
질문:The authenticity of host'ip(ip)'can't be established.
Git에 대한 SSH 구성:git제출할 ssh key 지정
"GIT_SSH_COMMAND 환경 변수(Git 2.3.0+)를 사용하여 ssh 매개변수를 전달합니다.
$ GIT_SSH_COMMAND='ssh -i ~/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'   


2.3 플러그인 구현
참조:
Go: appleboy/drone-git-push
Bash: muxueqz/drone-git-push-by-bash
  • 참조 중 첫 번째 플러그인을 사용할 때 원격 창고의 주소(SSH)를 제공할 때'id rsa invalid format'오류가 발생했습니다.
    + git remote add deploy ssh://[email protected]:xxxx/letitia/drone-test.git
    + git push deploy HEAD:master
    Warning: Permanently added '[xxx.xxx.xxx.xxx]:xxxx' (ECDSA) to the list of known hosts.
    Load key "/root/.ssh/id_rsa": invalid format
    [email protected]: Permission denied (publickey).
    fatal: Could not read from remote repository.
    
    Please make sure you have the correct access rights
    and the repository exists.
    
    플러그인 스크립트echo -n "${PLUGIN_SSH_KEY}"에서 변수의 내용을 볼 수 있습니다.
    -----BEGIN RSA PRIVATE KEY-----
    .......
    .......
    .......
    -----END RSA PRIVATE KEY-----
    그 중
    가 전달되지 않았습니다. echo -en "${PLUGIN_SSH_KEY}" 전달된 경우steps에서 볼 수 있는 내용은
    [secret:git_ssh_key]
    
    전의하여 .ssh/id_rsa
  • 에 저장해야 할 수도 있음
  • 원격 창고'origin'으로 전송을 선택했을 때'could not read Username'을 식별할 수 없는 오류가 발생했습니다.
    + git push origin HEAD:master
    fatal: could not read Username for 'http://xxx.xxx.xxx.xxx:xxxx': No such device or address
    
    원인은 Drone이 http를 통해 창고를 복제했고 복제 후 창고의origin이 http://로 바뀌어 사용자 이름을 읽을 수 없는 오류가 발생했기 때문일 수 있습니다
  • 구체적인sh스크립트의 부분:
    export GIT_SSH_COMMAND='ssh -o StrictHostKeyChecking=no'
    
    mkdir /root/.ssh
    chmod 700 /root/.ssh
    echo -en "$SSH_KEY" > /root/.ssh/id_rsa
    chmod 600 /root/.ssh/id_rsa
    touch /root/.ssh/known_hosts
    chmod 600 /root/.ssh/known_hosts
    ssh-keyscan -H xxx.xxx.xxx.xxx > /etc/ssh/ssh_known_hosts 2> /dev/null
    ssh-keyscan -H xxx.xxx.xxx.xxx > /root/.ssh/known_hosts
    
    plugin:
    FROM alpine
    
    RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
    RUN apk update && apk upgrade && \
        apk add --no-cache ca-certificates openssh curl bash git git-lfs
    ADD script.sh /bin/
    RUN chmod +x /bin/script.sh
    ENTRYPOINT /bin/script.sh
    
  • 만들기

  • 좋은 웹페이지 즐겨찾기