গিট পোস্ট-রিসিভ হুকের মূল হিসাবে কমান্ডগুলি কীভাবে কার্যকর করা যায়


12

আমি সম্প্রতি একটি সার্ভারে একটি আপস্টার্ট পরিষেবা হিসাবে চলমান একটি ওয়েব অ্যাপের জন্য একটি রিমোট গিট রেপো সেট আপ করেছি up আমি অ্যাপ্লিকেশন কোডটি আপডেট করার জন্য প্রয়োজনীয় ক্রিয়াকলাপের জন্য পোস্ট-রিসিভ হুকটি ব্যবহার করতে চাই এবং তারপরে স্টার্ট সার্ভিসটি পুনরায় চালু করুন। এটি আমার repo.git / hooks / পোস্ট-প্রাপ্ত ফাইল:

#!/bin/bash
export GIT_WORK_TREE=/var/www/current/myapp/
echo "Checking out new files and restarting app"
echo $USER
git checkout -f
sudo /sbin/stop myapp-service
sudo /sbin/start myapp-service

আমি এখানে যে তথ্য পড়েছি তার উপর ভিত্তি করে: AskUbuntu.com , মূল হিসাবে চালিত করার জন্য আপস্টার্ট কমান্ড পাওয়ার উপায়টি আমার ভিজুডো ফাইলটি সম্পাদনা করা। এখানে সম্পর্কিত স্নিপেট:

%sudo   ALL=(ALL:ALL) ALL
admin   ALL=(ALL:ALL) NOPASSWD: /sbin/start myapp-service /sbin/stop myapp-service

তবে আমি যখন রিমোটের দিকে ধাক্কা খাই, তখন আমি এর মতো আউটপুট পাই:

$ git commit -am "test" && git push prod master
[master 59ffccd] test
 1 file changed, 1 insertion(+), 1 deletion(-)
Counting objects: 11, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 544 bytes, done.
Total 6 (delta 4), reused 0 (delta 0)
remote: Checking out new files on production and restarting app
remote: admin
remote: 
remote: sudo: no tty present and no askpass program specified
remote: Sorry, try again.

আমি দেখেছি যে সঠিক ব্যবহারকারী পোস্ট-প্রাপ্তি স্ক্রিপ্টটি সম্পাদন করছে (উপরের মতো প্রতিবেদন হিসাবে অ্যাডমিন)।

কেউ কি আমাকে থামাতে এবং তারপরে একটি গিট-পোস্ট হুক স্ক্রিপ্টে আপস্টার্ট কাজ শুরু করতে সহায়তা করতে পারে? পাইথন, পিএইচপি, বা নোড.জেএস জাভাস্ক্রিপ্ট স্ক্রিপ্টগুলি গ্রহণযোগ্য হবে যদি তারা বাশের চেয়ে সহজেই আপস্টার্ট কমান্ড কার্যকর করতে সক্ষম হয় (আমি একজন নবীন নবাগত)

আমি আমার লেখার লগটি দেখেছিলাম এবং এটি আমার কাছে রয়েছে:

Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): auth could not identify password for [admin]
Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): conversation failed
Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): auth could not identify password for [admin]
Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): conversation failed
Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): auth could not identify password for [admin]
Apr 24 19:35:21 myhost01 sudo:    admin : 3 incorrect password attempts ; TTY=unknown ; PWD=/home/admin/myapp.git ; USER=root ; COMMAND=/s$
Apr 24 19:35:21 myhost01 sudo: unable to execute /usr/sbin/sendmail: No such file or directory
Apr 24 19:35:21  myhost01 sudo: pam_unix(sudo:auth): conversation failed

কোলনটি NOPASSWD এর পরে ভুল দেখাচ্ছে। এছাড়াও, আপনি লগগুলি পরীক্ষা করেছেন? "/var/log/auth.log"
এলিয়ট ফ্রিচ

উত্তর:


6

কমা ব্যবহার করে আপনার sudoers ফাইলে আপনার কমান্ডগুলি আলাদা করতে হবে। ঠিক এখন, আপনি একটি একক কমান্ডের অনুমোদন করছেন যারা /sbin/start myapp-service /sbin/stop myapp-service

আপনার লেখার দরকার আছে admin ALL=(ALL:ALL) NOPASSWD: /sbin/start myapp-service, /sbin/stop myapp-service


বখশিশের জন্য ধন্যবাদ. আমি আজ এটি পরে চেষ্টা করব। যদি এটি কার্যকর হয় তবে আমি আপনার উত্তরটি আমার নিজের উপরের চেয়ে গ্রহণ করব।
djheru

ধন্যবাদ যে কাজ করেছে। আমি মনে করি আমি এখনও একাধিক কমান্ড অনুমোদনের পরিবর্তে পৃথক স্ক্রিপ্ট রুট নিয়ে যাচ্ছি।
djheru

5

ঠিক আছে, আমি এটি বুঝতে পেরেছি। আমি একটি পৃথক স্ক্রিপ্ট তৈরি করতে হয়েছিল যেখানে আমি মূল হিসাবে চালাতে চেয়েছি কেবলমাত্র কমান্ড containing

#!/bin/bash
sudo /sbin/stop myapp-service
sudo /sbin/start myapp-service

তারপরে, আমার পোস্ট-গ্রহণের স্ক্রিপ্টে করুন:

#!/bin/bash
export GIT_WORK_TREE=/var/www/current/myapp/
set -x
echo "Checking out new files on production and restarting app"
echo $USER
git checkout -f
sudo /home/admin/restart-myapp

এবং অবশেষে আমার ভিজুডোতে:

%sudo   ALL=(ALL:ALL) ALL
admin   ALL=(ALL) NOPASSWD: /home/admin/restart-myapp

আশাকরি এটি কাউকে সাহায্য করবে


আমি নিশ্চিত যে
কোনও দিন

1

আমার /etc/sudoers.d/root_groupঠিক একটি লাইন রয়েছে তাতে একটি ফাইল রয়েছে %root ALL=(ALL) NOPASSWD: ALLএবং আমি গোষ্ঠী রুটে অ্যাকাউন্টগুলি যুক্ত করি যাতে তাদের sudoপাসওয়ার্ড ছাড়াই ব্যবহার করার অনুমতি দেওয়া হয় ।

আমি নিশ্চিত যে ফাইলের অনুমতিগুলির জন্য সুরক্ষা সম্পর্কিত প্রভাব রয়েছে যা ব্যবহারকারীদের অ্যাকাউন্টগুলিকে "রুট" গোষ্ঠীতে থাকা বিবেচনা করে না, তবে আপনি যদি উদ্বিগ্ন হন তবে আলাদা একটি গ্রুপ ব্যবহার করা যেতে পারে। কেবল লাইনটি পরিবর্তন %my_new_group ALL=(ALL) NOPASSWD: ALLকরুন এবং প্রাসঙ্গিক অ্যাকাউন্টগুলিকে আমার_নিউ_গ্রুপে যুক্ত করুন।


আপনাকে ধন্যবাদ, তবে আমি এটি সেট আপ করার চেষ্টা করছি যাতে পাসওয়ার্ড ছাড়া চালানো যায় এমন একমাত্র কমান্ড হ'ল আপ-স্টার্ট এবং স্ক্রিপ্টে কল শুরু করা।
djheru
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.