ãããžã§ã¯ãããã«ããããã¹ããå®è¡ããŠã³ãŒãã®å質ã確èªããããã«ãïŒ
Mail.ru Calendarãããžã§ã¯ãã§ïŒJenkins CIã䜿çšããŸãã ã¢ã»ã³ããªã¯gitãªããžããªã«ïŒããã¯ã§ïŒããã·ã¥ããçŽåŸã«éå§ãããŸãããã¡ããã倱æããã¢ã»ã³ããªã«é¢ããæ
å ±ãã¿ã€ã ãªãŒã«åãåããããšæããŸãã äžæ¹ã§ãé»åã¡ãŒã«éç¥ã§ååã§ããããã«æãããŸãããä»æ¹ã§ã¯ããã£ãšç®ç«ã£ãŠæ¥œãããã®ã欲ããã§ãã
çŽ3ã4幎åãç§ãå¥ã®ãããžã§ã¯ãã«åãçµãã§ãããšããåãç®çã§ã220ãã«ãã®ãããã¯ãŒã¯ã§åäœãããã©ãã·ã£ãŒã賌å
¥ããããããå¶åŸ¡ããããã«ãæªåé«ãMasterKit瀟ã®MP709ã¢ãžã¥ãŒã«ïŒUSBãªã¬ãŒïŒã賌å
¥ãããŸããã ãœãªã¥ãŒã·ã§ã³ã¯æåããŸããã§ããïŒãŸãããã®ã¢ãžã¥ãŒã«ã®LinuxãµããŒãããããŸããã§ããïŒããŒã¿äº€æãããã³ã«ãéã«ããŠãLinuxçšã®ç¬èªã®ããã©ã€ããŒããäœæããå¿
èŠããããŸããïŒã次ã«ãéåžžç¯ã®å Žæãã³ã³ãã¥ãŒã¿ãŒãšã³ã³ã»ã³ãããã®é
ç·ã«ãã£ãŠå¶éãããŠããŸããã ãããã«ããããã¶ã€ã³ã¯é ãã®ç®±ã«æšãŠãããç¿Œã§åŸ
ã£ãŠããŸããã
æè¿ãç§ã®æã¯åã³combããç§ã¯äœãé¢çœãããšããããã£ããã圹ã«ç«ããªãã£ãã®ã§ããã©ãã·ã£ãŒãæãåºããŸããã ãŽãã®å±±ã«é£ã³èŸŒãã§ãããããé£ãäžããŸããïŒArduino Nano-2åããªã¬ãŒã¢ãžã¥ãŒã«-1åãMX-05Vã¬ã·ãŒããŒ-1åãMX-FS-03Vãã©ã³ã¹ããã¿ãŒ-1åã æ®ãã®ãŽãããã«ã³ããŒã®é
ã«æã蟌ã¿ã次ã®1æéãåŸ
ã£ãŠãããã€ã¹ã®çµã¿ç«ãŠãå§ããŸããã
åæ
çãªstè¿· ïŒæãç§ãè¥ããŠå€ãã®æéãéãããŠãããšããç§ã¯ããã€ãã®AVRãã€ã¯ãã³ã³ãããŒã©ãŒã䜿çšããããŒãããšããã³ã°ããããã€ã¹ãã¯ãã ä»ãããã¢ã»ã³ããªèšèªã§ããã°ã©ã ããŸã...åºå£ã§ã ããã»ã¹ããããå€ãã®åã³ããããçµæã¯åãã§ãã
ããŒããŠã§ã¢
åè·¯ã¯éåžžã«ã·ã³ãã«ã§ããããšãå€æããŸããããªããªããç§ãã¡ã®æ代ã«ã¯èšå€§ãªæ°ã®ç°ãªãé»åã¢ãžã¥ãŒã«ãèšèšè
ããããã¯ã«ãããã¯ãã ããŠãæã«å
¥ããããšããªããåè·¯ãããã°ã©ãã³ã°ãå匷ããŠããªã人ã®ããã«é»åããã€ã¹ãçµã¿ç«ãŠãããšãã§ããããã§ããéä¿¡æ©ïŒArduino Nano + MX-FS-03VïŒ
ã¬ã·ãŒããŒïŒMX-05V + Arduino Nano +ãªã¬ãŒã¢ãžã¥ãŒã«ïŒïŒ
æäœã®åçã¯ããã«ã·ã³ãã«ã§ããArduinoã¯ã³ã³ãã¥ãŒã¿ãŒã®USBããŒãã«æ¥ç¶ããã·ãªã¢ã«ã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠã³ãã³ãããªãã¹ã³ããŸãã ã³ãã³ããæå¹ãªå Žåãç¡ç·éä¿¡æ©ãä»ããŠéä¿¡ãããŸãã 2çªç®ã®ãããã¯ã§ã¯ãå¥ã®Arduinoãã¬ã·ãŒããŒããªãã¹ã³ããã³ãã³ããåä¿¡ãããšããªã¬ãŒããªã³ãŸãã¯ãªãã«ããŸãã ããã ãã§ã ãã£ãŒãããã¯ããã§ãã¯ïŒãã§ãã¯ãµã ïŒãããžãã¯ã¯ãããŸããã
éä¿¡æ©ããã°ã©ã ã¯æ¬¡ã®ãšããã§ãã
#include <VirtualWire.h>
int ledPin = 13 ; // LEDããã³ã§çãã
char incoming_byte ; //çä¿¡ã¡ãã»ãŒãžãä¿åãããããã¡
char input_data [ 12 ] ; //ã¡ãã»ãŒãžã®ãµã€ãº
int input_size = 0 ; //ã«ãŠã³ã¿ãŒãã«ãŠã³ã¿ãŒã®ã¿
void setup ïŒ ïŒ {
// LEDãã³ãèšå®ããŸã
pinMode ïŒ ledPinãOUTPUT ïŒ ;
digitalWrite ïŒ ledPinãLOW ïŒ ;
//ã·ãªã¢ã«ãåæåããŸãïŒ9600 bpsïŒ
ã·ãªã¢ã« éå§ ïŒ 9600 ïŒ ;
ã·ãªã¢ã« println ïŒ "æºåå®äº" ïŒ ;
// IOãšISRãåæåããŸã
vw_set_ptt_inverted ïŒ true ïŒ ; // DR3100ã«å¿
èŠ
vw_setup ïŒ 1200 ïŒ ; //ããã/ç§
}
voidã«ãŒãïŒ ïŒ {
while ïŒ Serialãavailable ïŒ ïŒ > 0 ïŒ {
incoming_byte =ã·ãªã¢ã«ã èªã ïŒ ïŒ ; //çä¿¡ãã€ããèªã¿åããŸã
if ïŒ incoming_byte == 'n' ïŒ {
input_data [ input_size ++ ] = 0 ;
if ïŒ strncmp ïŒ input_dataã "Achtung ON" ã 10 ïŒ == 0 || strncmp ïŒ input_dataã "Achtung ON" ã 11 ïŒ == 0 ïŒ {
digitalWrite ïŒ ledPinãHIGH ïŒ ;
vw_send ïŒ ïŒ uint8_t * ïŒ input_dataãinput_size ïŒ ;
vw_wait_tx ïŒ ïŒ ; //ã¡ãã»ãŒãžå
šäœããªããªããŸã§åŸ
ã€
digitalWrite ïŒ ledPinãLOW ïŒ ;
ã·ãªã¢ã« println ïŒ "OK" ïŒ ;
} else {
ã·ãªã¢ã« println ïŒ "FAIL" ïŒ ;
}
while ïŒ input_size- > = 0 ïŒ {
input_data [ input_size ] = 0 ;
}
input_size = 0 ; //ã«ãŠã³ã¿ããªã»ããããŸã
} else {
if ïŒ input_size <= 11 ïŒ {
input_data [ input_size ] = incoming_byte ;
}
input_size ++ ;
}
}
}
åä¿¡æ©ããã°ã©ã ïŒ
#include <VirtualWire.h>
int ledPin = 13 ; // LEDããã³ã§çãã
int relayPin = 3 ; //ãªã¬ãŒãä»ãããã³
ãã€ãinput_data [ VW_MAX_MESSAGE_LEN ] ; //çä¿¡ã¡ãã»ãŒãžãä¿åãããããã¡
ãã€ãinput_size = VW_MAX_MESSAGE_LEN ; //ã¡ãã»ãŒãžã®ãµã€ãº
void setup ïŒ ïŒ {
// LEDãã³ãèšå®ããŸã
pinMode ïŒ ledPinãOUTPUT ïŒ ;
digitalWrite ïŒ ledPinãLOW ïŒ ;
//ãªã¬ãŒãã³ãèšå®ããŸã
pinMode ïŒ relayPinãOUTPUT ïŒ ;
digitalWrite ïŒ relayPinãHIGH ïŒ ;
// IOãšISRãåæåããŸã
vw_set_ptt_inverted ïŒ true ïŒ ; // DR3100ã«å¿
èŠ
vw_setup ïŒ 1200 ïŒ ; //ããã/ç§
vw_rx_start ïŒ ïŒ ; //ã¬ã·ãŒããŒãèµ·åããŸã
}
voidã«ãŒãïŒ ïŒ {
//åŠçããããŒã¿ããããã©ããã確èªããŸã
if ïŒ vw_get_message ïŒ input_dataã ïŒ input_size ïŒ ïŒ {
digitalWrite ïŒ ledPinãHIGH ïŒ ;
if ïŒ strncmp ïŒ ïŒ char * ïŒ input_dataã "Achtung ON" ã 10 ïŒ == 0 ïŒ {
digitalWrite ïŒ relayPinãLOW ïŒ ; // achtungïŒ ãªã¬ãŒããªã³ã«ãã
} else if ïŒ strncmp ïŒ ïŒ char * ïŒ input_dataã "Achtung OFF" ã 11 ïŒ == 0 ïŒ {
digitalWrite ïŒ relayPinãHIGH ïŒ ; //ãªã¬ãŒããªãã«ããŸã
} else {
é
å»¶ïŒ 1000 ïŒ ;
}
digitalWrite ïŒ ledPinãLOW ïŒ ;
}
}
ã芧ã®ãšããããã¹ãŠãéåžžã«ç°¡åã§ãã ãã€ã¯ãã³ã³ãããŒã©ãŒãæ¥ç¶ããArduinoããã°ã©ã ã«çµã¿èŸŒãŸããããŒãããŒããŒã䜿çšããŠãã¬ã·ãŒããŒãšãã©ã³ã¹ããã¿ãŒããããããã©ãã·ã¥ãããã©ã³ã¹ããã¿ãŒã«æ¥ç¶ããããã·ãªã¢ã«ã¢ãã¿ãŒããå®è¡ãããªã¬ãŒã®ãªã³/ãªãã³ãã³ããšç¡å¹ãªã³ãã³ãïŒãã§ãã¯çšïŒãéä¿¡ããŸãã
ãªã¬ãŒããªã³ãšãªãã«ãªãããã¹ãŠãæ©èœãããã¹ãŠãæ£åžžã§ãã
ãã©ãã·ã£ãŒãå解ããŠãã¬ã·ãŒããŒãšãªã¬ãŒã®é
çœ®å Žæã確èªããŸãã
å
éšã«å€ãã®ã¹ããŒã¹ãããããšãããããŸãã ããã€ã¹ã®çµã¿ç«ãŠãéå§ããŸãããæåã«åä¿¡æ©ã®é»åã«å¯ŸåŠããå¿
èŠããããŸãã
ç§ã¯ã¡ããã©ããããããŸãããããã¢ã®æºåž¯é»è©±ããäžèŠã«ãªã£ãå€ãé»æºãåãããããå解ããŠã220ãã«ãã®åä¿¡æ©ã«é»åãäŸçµŠã§ããå°ããªããŒããæã«å
¥ããŸããã ã±ãŒã¹ããããŒããåãå€ãããã»ã¹ã¯éåžžã«å°é£ã§ããããšã«æ³šæããããåŸãŸããã§ããã ã±ãŒã¹ã¯é«å質ã®ãã©ã¹ããã¯ã§äœãããŠããŸãã ããã«ãããããããç§ã¯æåããŸããïŒ
åä¿¡æ©ãšé»æºã§ãã©ãã·ã£ãŒãçµã¿ç«ãŠãŸãïŒ
ãã¹ãŠãæ©èœããããšã確èªããŸãããããã¯ãŒã¯å
ã®ããã€ã¹ã®é»æºãå
¥ãããã·ãªã¢ã«ã¢ãã¿ãŒãçµç±ã§ãAchtung ONãã³ãã³ãããã©ã³ã¹ããã¿ãŒã«éä¿¡ããŸãã ãªã¬ãŒãã¯ãªãã¯ãããã©ã€ããç¹ç¯ãããšã³ãžã³ãå転ããæ声ãäžãããŸããïŒ ãAchtung OFFãã³ãã³ããéä¿¡ããŸã-ãã¹ãŠãåæ¢ããŸããã ç¹æ»
ããã©ã€ãã¯æ©èœããŠããŸãã ããžãšäžåœã®ãããã¡ã«ãæ¥çå€ã§ããŒããåãä»ããæ§é å
šäœãå
ã®åœ¢ã«çµã¿ç«ãŠãã ãã§ãã
éä¿¡æ©ã䜿çšããŠãç§ã¯åŒå
žã«ç«ããããã¹ãŠãäžç·ã«ã¯ãã ä»ãããããšã«ããŸããïŒ
å°æ¥çã«ã¯ãããããã¹ãŠãçŸããã±ãŒã¹ã«è©°ã蟌ãäºå®ã§ãã
ãœãããŠã§ã¢
ã³ã³ãã¥ãŒã¿ãŒãããã©ã³ã¹ããã¿ãŒã«ã³ãã³ããéä¿¡ããããã«ãç°¡åãªã¹ã¯ãªãããäœæããŸãã
ïŒïŒ/ usr / bin / env python
ããã
ããªã³ããŸãã¯ããªããã³ãã³ããéä¿¡æ©ã«éä¿¡ããŸãã
ããã
__future__ import print_function ãã
茞å
¥ OS
ã€ã³ããŒãã·ã¹ãã
茞å
¥ã·ãªã¢ã«
__name__ == '__main__'ã®å Žå ïŒ
if len ïŒ sysãargv ïŒ ïŒ = 3 ïŒ
print ïŒ "䜿çšæ³ïŒachtung / dev / ttyXX <ON | OFF>" ïŒ
sys çµäº ïŒ 1 ïŒ
tty = sys argv [ 1 ]
os㧠ãªã å Žå ã ãã¹ ååš ïŒ tty ïŒ ïŒ
å°å· ïŒ ããšã©ãŒïŒããã€ã¹ 'ïŒ
s'ã¯ååšããŸããã ïŒ
tty ïŒ
sys çµäº ïŒ 1 ïŒ
ã³ãã³ã= sys argv [ 2 ]
ã³ãã³ãã ïŒ 'ON' ã 'OFF' ïŒã« ãªã å Žå ïŒ
print ïŒ "ãšã©ãŒïŒäžæãªã³ãã³ã 'ïŒ
s'" ïŒ
command ïŒ
sys çµäº ïŒ 1 ïŒ
éä¿¡æ©=ã·ãªã¢ã«ã ã·ãªã¢ã« ïŒ tty ã 9600 ïŒ
éä¿¡æ©ã®å Žå ã readline ïŒ ïŒ ã ã¹ããªãã ïŒ ïŒ ïŒ = 'achtungã®æºå' ïŒ
å°å· ïŒ ããšã©ãŒïŒããã€ã¹ãåæåãããŠããŸããã ïŒ
sys çµäº ïŒ 1 ïŒ
éä¿¡æ©ã æžãèŸŒã¿ ïŒ "AchtungïŒ
sn" ïŒ
ã³ãã³ãïŒ
çµæ=éä¿¡æ©ã readline ïŒ ïŒ ã ã¹ããªãã ïŒ ïŒ
çµæãªã ïŒ = ãOKã ïŒ
å°å· ïŒ ããšã©ãŒïŒããã€ã¹ã®å¿çã¯OKã§ã¯ãããŸããã ïŒ
sys çµäº ïŒ 1 ïŒ
ã¹ã¯ãªãããæ©èœãããã«ã¯ãäŸåé¢ä¿ïŒ
pyserialã¢ãžã¥ãŒã«ïŒãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã
pip install pyserial
ãŸãããªã³/ãªããã©ãã·ã£ãŒãã楜ãã¿ãã ããïŒ
python achtung.py /dev/tty.usbserial-A900FYDU ON
python achtung.py /dev/tty.usbserial-A900FYDUãªã
Jenkins CIã®ã¢ã»ã³ããªã®ã¹ããŒã¿ã¹ãååŸããã«ã¯ã
jenkinsapiã¢ãžã¥ãŒã«ã䜿çšããã®ã
æé©ã§ãããã®å Žåãã¹ã¯ãªããã¯åºæ¬ã«ãªããŸãã äŸåé¢ä¿ã®ã€ã³ã¹ããŒã«ïŒ
pip install jenkinsapi
ã¹ã¯ãªããèªäœïŒ
ïŒïŒ/ usr / bin / env python
ããã
Jenkinsãžã§ãã®ã¹ããŒã¿ã¹ã確èªãããžã§ããæ£åžžã§ãªãå Žåã¯ã¢ã©ãŒã ãå®è¡ããŸãã
ããã
茞å
¥ OS
ã€ã³ããŒãã·ã¹ãã
茞å
¥ æé
茞å
¥ã·ãªã¢ã«
ãžã§ã³ãã³ãµããã ã ãžã§ã³ãã³ã¹ ã€ã³ããŒã ãžã§ã³ãã³ã¹
ãžã§ã³ãã³ãµããã ã äŸå€ã¯ JenkinsAPIExceptionãã€ã³ããŒãããŸã
URL = 'http://jenkins.example.ru/'
USERNAME = 'jenkins'
ãã¹ã¯ãŒã= ãç§å¯ã
JOBS = [ 'build' ã 'test' ã 'lint' ]
TTY = '/dev/tty.usbserial-A900FYDU'
def job_failed ïŒ connectãjob_name ïŒ ïŒ
ããã
ããŒã«å€ã®ãžã§ãã¹ããŒã¿ã¹ãè¿ããŸãïŒTrue-æåãFalse-倱æïŒã
ããã
job_name ãæ¥ç¶ãããŠããªã å Žå ïŒ
çã è¿ã
last_build = connect [ job_name ] ã get_last_build ïŒ ïŒ
last_buildã®å Žå ã is_running ïŒ ïŒ ïŒ
åœãè¿ã
build_status = last_buildã get_status ïŒ ïŒ
build_status in ïŒ 'FAIL' ã 'FAILED' ã 'FAILURE' ã 'ERROR' ã 'REGRESSION' ïŒã®å Žå ïŒ
çã è¿ã
åœãè¿ã
def send_to_transmitter ïŒããã€ã¹ãã³ãã³ãïŒ ïŒ
ããã
ããã€ã¹ã«ã³ãã³ããéä¿¡ãããšã©ãŒãçºçãããšçµäºããŸãã
ããã
ããã€ã¹ã æžãèŸŒã¿ ïŒ "AchtungïŒ
sn" ïŒ
ã³ãã³ãïŒ
çµæ=ããã€ã¹ã readline ïŒ ïŒ ã ã¹ããªãã ïŒ ïŒ
çµæãªã ïŒ = ãOKã ïŒ
å°å· ïŒ ããšã©ãŒïŒããã€ã¹ã®å¿çã¯OKã§ã¯ãããŸããã ïŒ
sys çµäº ïŒ 1 ïŒ
__name__ == '__main__'ã®å Žå ïŒ
os㧠ãªã å Žå ã ãã¹ ååš ïŒ TTY ïŒ ïŒ
å°å· ïŒ ããšã©ãŒïŒããã€ã¹ 'ïŒ
s'ãååšããŸããã ïŒ
TTY ïŒ
sys çµäº ïŒ 1 ïŒ
è©ŠããŠãã ãã ïŒ
connect = Jenkins ïŒ URLããŠãŒã¶ãŒåããã¹ã¯ãŒãïŒ
ååšããå Žå ïŒ jobsã®job_nameã®job_failed ïŒ connectãjob_name ïŒ ïŒ ïŒ
éä¿¡æ©=ã·ãªã¢ã«ã ã·ãªã¢ã« ïŒ TTYã 9600 ïŒ
éä¿¡æ©ã®å Žå ã readline ïŒ ïŒ ã ã¹ããªãã ïŒ ïŒ ïŒ = 'achtungã®æºå' ïŒ
å°å· ïŒ ããšã©ãŒïŒããã€ã¹ãåæåãããŠããŸããã ïŒ
sys çµäº ïŒ 1 ïŒ
send_to_transmitter ïŒéä¿¡æ©ã ãONã ïŒ
æé ã å¯ã ïŒ 5 ïŒ
send_to_transmitter ïŒéä¿¡æ©ã ããªãã ïŒ
JenkinsAPIException ãé€ã ïŒ
sys çµäº ïŒ 1 ïŒ
èµ·åãããã¹ã¯ãªããã¯Jenkinsã«æ¥ç¶ããæå®ãããã¿ã¹ã¯ã®ã¹ããŒã¿ã¹ãåä¿¡ãããã®ãã¡ã®1ã€ã倱æããå Žåã5ç§éç¹æ»
ã©ã€ãããªã³ã«ããŸãïŒããã«ãããç¹æ»
ãè¿·æã«ãªããªãããã«ããŸããããã«ãã倱æããããšãæ確ã«ããŸãïŒã ãã®ã¹ã¯ãªããã¯ãå¹³æ¥ïŒåŸæ¥å¡ã®å€åæéïŒã®11:00ãã20:00ãŸã§ãæ¯åã¯ã©ãŠã³ã§å®è¡ãããŸããå€éãŸãã¯é±æ«ã«ãã©ãã·ã£ãŒããªã³ã«ããããšã¯æå³ããããŸããã
ãã¡ãããã¢ã»ã³ããªã®çµæã泚ãããšã¯ã§ããŸããã§ããããã¢ã»ã³ããªã倱æããå Žåã圌èªèº«ããã©ãã·ã£ãŒã®çµã¿èŸŒã¿ãéå§ããããã«Jenkinsãæ§æããããšãã§ããŸããããåœç€Ÿã®ã»ãã¥ãªãã£èŠä»¶ã¯ãã®å¯èœæ§ãæé€ããŠããŸãïŒãµãŒããŒãããããã¯ãŒã¯ãžã®ãªãã£ã¹ãããã¯ãŒã¯ãžã®æ¥ç¶ã¯å³ããçŠæ¢ãããŠããŸãã
å©çïŒ
ãã¹ãŠãã»ããã¢ãããããåäœãããã¹ãŠã®éçºè
ïŒãã«ãããã«ãããéçºè
ãé€ãïŒãæãé©åãªç¬éã«æããç¹æ»
ã§åãã§ããŸãã
ãœãŒã¹ïŒ
https :
//github.com/dreadatour/jenkins-achtungæŽæ° ïŒããã€ã¹æäœãããªïŒ